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
展开
risk888
2012-10-09 · TA获得超过126个赞
知道答主
回答量:97
采纳率:0%
帮助的人:79.5万
展开全部
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 你可以拿这个试一下哈,对照这个改一下你原来的程序,刚好看到你这个问题,举手之劳了,祝您学业进步。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式