- 积分
- 0
- 注册时间
- 2007-5-20
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 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)');
[c,err,yc] = bisect('fu(k)',0,pi/2,1e-5);
end
y=c;
err
二、二分法子函数(“我相信本函数是无误的”):
function [c,err,yc]=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)可求吗? |
|