matlab中怎样定义一个函数式f(x),使f(a)f(b)用起来更简单
我用二分法求解非线性方程f(x)=x^3-2*x-1在区间[1,2]的零点,想创建一个函数式f(x),在使用f(a)f(b)f(mid)的时候方便一些,应该怎么创建呢?谢...
我用二分法求解非线性方程f(x)=x^3-2*x-1在区间[1,2]的零点,想创建一个函数式f(x),在使用f(a) f(b) f(mid)的时候方便一些,应该怎么创建呢?谢谢!
%定义函数dichotomy(二分法),三个输入变量a,b,f,accuracy 一个输出变量x即为非线性函数的零点
function x0=dichotomy(a,b,accuracy)
if f(a)==0
x0=a;
elseif f(b)==0
x0=b;
end
%判断在区间的端点是否有零点
if f(a)*f(b)>0
disp(' 不能保证函数在该区间有零点!');
%当区间两端点的函数值同号时,不能保证该函数在该区间有零点
end
if f(a)*f(b)<0
while abs(a-b)>accuracy
mid=(a+b)/2;
if f(a)*f(mid)<0
b=mid;
elseif f(a)*f(mid)==0
x0=mid;
break;
else
a=mid;
end
end
x0=a;
end 展开
%定义函数dichotomy(二分法),三个输入变量a,b,f,accuracy 一个输出变量x即为非线性函数的零点
function x0=dichotomy(a,b,accuracy)
if f(a)==0
x0=a;
elseif f(b)==0
x0=b;
end
%判断在区间的端点是否有零点
if f(a)*f(b)>0
disp(' 不能保证函数在该区间有零点!');
%当区间两端点的函数值同号时,不能保证该函数在该区间有零点
end
if f(a)*f(b)<0
while abs(a-b)>accuracy
mid=(a+b)/2;
if f(a)*f(mid)<0
b=mid;
elseif f(a)*f(mid)==0
x0=mid;
break;
else
a=mid;
end
end
x0=a;
end 展开
1个回答
展开全部
fa=feval(fun,a);
追问
你好,帮我写具体点好吗?还要再建立子函数吗?
追答
额,你不就是想要一种输入函数的方式么?
不好意思 写的过于简单了。
在程序也就是.m文件里面直接使用feval(fun,x)来表示你的那个函数,指的就是关于x的一个函数fun,你在运行时在matlab命令窗口输入fun=inline(‘x^3-2*x-1’);就可以了。
下面给出我们老师给的一个程序,《数值分析》中科大出版社,朱晓临老师编的,里面有很多源代码。底下的应该挺容易懂的,希望对你有帮助。(eff.m文件)
function[x,k]=eff(fun,a,b,eps)
%if nargin0
disp('[a,b]不是有根区间,请调整');
return;
end
k=0;
while abs(b-a)/2>eps
x=(a+b)/2;fx=feval(fun,x);
if fa*fx<0
b=x;fb=fx;
else
a=x;fa=fx;
end
k=k+1;
end
x=(a+b)/2
运行时在命令窗口输入:fun=inline('x^3-x-1'); [x,k]=eff(fun,1,1.5,0.005)
输出结果:
x=1.3242
k=6 你可以拿这个试一下哈,对照这个改一下你原来的程序,刚好看到你这个问题,举手之劳了,祝您学业进步。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询