循环中自变量的定义以及inline的使用
本帖最后由 chenyouzhi 于 2009-3-18 20:06 编辑本人希望使用二分法对一个非线性方程进行求解,该方程是经过有限差分过程后得到的n个方程之一,为了得到最终结果必须对这n个方程进行依次求解,故本人在同一个for 循环中使用内联函数inline确立每个方程的函数表达(这其中就涉及到一个自变量的问题),随后直接使用二分法函数进行求解,得出的结果作为已知量用于下一次循环使用。
程序如下:
一、主程序:
function y = fff(a)
%求助举例
b=3;
c=4;
x=zeros(5);
x(1)=1;
for k=2:5
fu(k) = inline('a*x(k-1)+b*x(k)-c*cos(x(k))','x(k)');
= bisect('fu(k)',0,pi/2,1e-5);
end
y=c;
err
二、二分法子函数(“我相信本函数是无误的”):
function =bisect(f,a,b,delta)
% 二分法求解非线性方程
%Input - f is the function input as a string 'f'
% - a and b are the left and right endpoints
% - delta is the tolerance
%Output - c is the zero
% - yc= f(c)
% - err is the error estimate for c
if nargin<4 delta = 1e-4;end
ya=feval(f,a);
yb=feval(f,b);
if ya*yb > 0,return,end
max1=1+round((log(b-a)-log(delta))/log(2));
for k=1:max1
c=(a+b)/2;
yc=feval(f,c);
if yc==0
a=c;
b=c;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
if b-a < delta, break,end
end
c=(a+b)/2;
err=abs(b-a);
yc=feval(f,c);
在MATLAB窗口执行fff后,问题出现了......
??? Attempted to access x(1); index must be a positive integer or logical.
希望得到三个方面的解答:
1、上述算法问题在哪里,该如何改进?
2、内联函数inline的使用限制?
3、feval是不是可以直接在这里使用,即feval(f,c)可求吗? 问题出现的原因是,matlab数组引用是从1开始的,不能从0开始,所以引用x(0)错误
顺便说一句,你这个x(0)好象在后边的循环中没有用到呀,似乎你想实现的是x(1)=1; 2# messenger
对,这个主程序是我在网上编的,有个瑕疵,改成x(1)问题是不是就没了?要不请你帮我调试一下看看,多谢。
(我自己的电脑没联网,我在网吧:'( ) 问题应该是使内联函数inline定义函数是出现了错误,哪位高手能帮忙解释一下! 改用function吧,inline如果要达到随循环改变变量的目的,非常麻烦
另外,你的bisect函数,要求 f 函数在a,b两端点处的函数值的符号相反
你回去再好好改改吧,你的程序要改的东西很多
页:
[1]