登录论坛

查看完整版本 : [MATLAB基础] 求助:想把这个程序改成不用数组运算的。谢谢各位了


elliottboy
2010-01-06, 11:42
这是一个扫描求根的程序,因为最后的式子有很大,所以不想用数组运算 想改造成循环解决 实在是不知道怎么调整,整了两天也没结果,求助各位大侠
function y=funs(w)
%y=2.*w.^3+2.*w.^2-3.*w-3
y=1987416747626931/17592186044416*sinh(3389730675253695/144115188075855872*(w.^2).^(1/4)).*sin(3389730675253695/144115188075855872*(w.^2).^(1/4))./(w.^2).^(1/2) %(这个式子 还是比较小可以用数组运算,但是我算的另一个更多 比这个还大 加数组不好算)


function [k,w]=yuanpinlv(a,b,h,tol)
% 输入的量--- a和b是闭区间[a,b]的左、右端点;
%---h是步长;
%---tol是预先给定的精度.
% 运行后输出的量---k是搜索点的个数;
% --- r是方程 在[a,b]上的实根的近似值,其精度是tol;
X=a:h:b;Y=funs(X);n=(b-a)/h+1;m=0;
X(n+1)=X(n);Y(n+1)=Y(n);
for k=2:n
X(k)=a+k*h;Y(k)=funs(X(k)); %程序中调用的funs.m为函数
sk=Y(k)*Y(k-1);
if sk<=0,
m=m+1;w(m)=X(k);
end
xielv=(Y(k+1)-Y(k))*(Y(k)-Y(k-1));
if (abs(Y(k))<tol)&( xielv<=0)
m=m+1;w(m)=X(k);
end
end

[k,w]=yuanpinlv(900,20000,10,0.0001)

谢谢 各位了