matlab matlab解非线性方程程求解

苹果/安卓/wp
积分 1187, 距离下一级还需 188 积分
权限: 自定义头衔, 签名中使用图片, 隐身
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发下一级可获得
权限: 设置帖子权限道具: 提升卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 149 天连续签到: 1 天[LV.7]常住居民III
论坛里的各位大神,小弟现在我碰到一个问题,卡了四五天了。我现在需要循环求解非线性方程,举个例子,现在有一个方程alnx+bx-c=0(只是一个例子),其中a,b,c都是已知数,x是未知数,我要通过迭代的方法把x解出来。现在的问题是,a,b,c变量我都有10000条,就是说对应每个a,b,c我都要迭代解出一个解,然后这个过程重复10000次,求出一万个解,请问这个用matlab怎么做到?如果能做到,用什么函数?怎么做?请论坛里的各位大侠不吝赐教,不胜感激!
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
用fzero函数,直接就可以求解,不需要什么循环
crossbone254 发表于
用fzero函数,直接就可以求解,不需要什么循环那我有一万条数据,参数值a,b,c怎么写?写成向量的形式吗?初始值也是一列向量或者数组的形式吗?
wudizhao 发表于
那我有一万条数据,参数值a,b,c怎么写?写成向量的形式吗?初始值也是一列向量或者数组的形式吗?是的,最简单的是用3个向量存储好a,b,c的一万个值,然后用循环,每次掉用一组放进fzero里面求解
crossbone254 发表于
是的,最简单的是用3个向量存储好a,b,c的一万个值,然后用循环,每次掉用一组放进fzero里面求解那还是要用自己写循环吗?还是自动就循环了?
wudizhao 发表于
那还是要用自己写循环吗?还是自动就循环了?自己写
crossbone254 发表于
自己写小弟实在愚钝,能否麻烦大侠写一段示范程序,在下不胜感激,谢谢!
重新看了下,fsolve函数更适合些
假设你的 a b c都已经生成好,都是10000行的列向量
代码如下:
f = @(x,a,b,c) a*log(x) + b*x +c;
x = zeros(10000,1)
for t = 1:10000
& &&&x(t) = fsolve(f,1,optimset,a(t),b(t),c(t));
上面的fsolve里面的1是可以改动的,这个位置的值是初始值的意思,就是一个你猜测的解,可以换成一个你觉得使得方程比较接近0的数值,可能会算得快些,fzero需要两个初始值,在这里比较难满足,所以改用fsolve。我自己给a,b,c随机赋了10个值算发现可能有解不出来的,那种情况给出的是程序终止时的值(每用完1次fsolve主窗口会有一段文字告诉你是解出来还是没解出来,但是等你1万个循环完那里1万段你估计没法一个个确定了),应该可以改代码使得这种情况给出提示或者给x赋特殊值使得看得出来,但是这个函数我研究不深,想不出怎么解决,你可以自己看help再钻研一下。
crossbone254 发表于
重新看了下,fsolve函数更适合些
假设你的 a b c都已经生成好,都是10000行的列向量
好的,谢谢大师,万分感谢!!
crossbone254 发表于
重新看了下,fsolve函数更适合些
假设你的 a b c都已经生成好,都是10000行的列向量
等我有电脑的时候一定加你为好友!
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
MATLAB应用_求解非线性方程.doc 16页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
你可能关注的文档:
··········
··········
第7章 求解非线性方程
多项式运算在MATLAB中的实现,是n+1项之和
在MATLAB中,n次多项式可以用n次多项式系数构成的长度为n+1的行向量表示
[a0, a1,……an-1,an]
二、多项式的加减运算
设有两个多项式和。它们的加减运算实际上就是它们的对应系数的加减运算。当它们的次数相同时,可以直接对多项式的系数向量进行加减运算。当它们的次数不同时,应该把次数低的多项式无高次项部分用0系数表示。
a=[1, -2, 5, 3]; b=[0, 0, 6, -1]; c=a+b
例3 设,,求f(x)+g(x)
f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; g1=[0, 0, 0, g];%为了和f的次数找齐
f+g1, f-g1
三、多项式的乘法运算
conv(p1,p2)
例4 在上例中,求f(x)*g(x)
f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3];
conv(f, g)
四、多项式的除法运算
[Q, r]=deconv(p1, p2)
表示p1除以p2,给出商式Q(x),余式r(x)。Q,和r仍为多项式系数向量
例4 在上例中,求f(x)/g(x)
f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3];
[Q, r]=deconv(f, g)
五、多项式的导函数
p=polyder(P):求多项式P的导函数
p=polyder(P,Q):求P·Q的导函数
[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。
参数P,Q是多项式的向量表示,p,q也是多项式的向量表示。
例4 求有理分式的导函数
P=[3, 5, 0, -8, 1, -5];%有理分式分子
Q=[10, 5, 0, 0, 6, 0, 0, 7, -1, 0, -100];%有理分式分母
[p,q]=polyder(P,Q)
六、多项式求根
多项式求根就是求满足多项式p(x)=0的x值。N次多项式应该有n个根。这些根可能是实根,也可能是若干对共轭复根。其调用格式是
x=roots(P)
其中P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),…,x(n)分别代表多项式的n个根。
该命令每次只能求一个一元多项式的根,该指令不能用于求方程组的解,必须把多项式方程变成Pn (x) = 0的形式;
例4 求方程的解。
首先将方程变成Pn (x) = 0的形式:
roots([1 -1 0 -1])
求多项式x4+8x3-10的根。
A=[1,8,0,0,-10];
x=roots(A)
若已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为:
若x为具有n个元素的向量,则poly(x)建立以x为其根的多项式,且将该多项式的系数赋给向量P。
已知 f(x)=3x5+4x3-5x2-7.2x+5
(1) 计算f(x)=0 的全部根。
(2) 由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。
P=[3,0,4,-5,-7.2,5];
X=roots(P)%求方程f(x)=0的根
G=poly(X)%求多项式g(x)
将这个结果乘以3,就与f(x)一致
求解非线性方程f ( x ) = 0
方程求根的一般形式是求下列方程的根:
f ( x ) = 0(l)
实际上,就是寻找使函数 f ( x)等于零的变量x,所以求方程(l)的根,也叫求函数 f ( x)的零点。如果变量x是列阵,则方程(l)就代表方程组。
当方程(l)中的函数 f (x)是有限个指数、对数、三角、反三角或幂函数的组合时,则方程(l)被称为超越方程,例如 e-x - sin(πx / 2 ) +lnx = 0 就是超越方程。
当方程(l)中的函数f(x)是多项式时,即 f(x)=Pn(x)= anxn + an-1xn + … + alx + a0,则方程(l)就成为下面的多项式方程,也称代数方程:
Pn(x)= anxn + an-1xn + … + alx + a0 = 0( 2 )
Pn(x)的最高次数n等于2、3时,用代数方法可以求出方程(2)的解析解,但是,当n ≥ 5时,伽罗瓦(Galois)定理已经证明它是没有代数求根方法的。至于超越方程,通常很难求出其解析解。所以,方程(l)的求解经常使用作图法或数值法,而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。
本章首先介绍求解 f ( x )
正在加载中,请稍后...
76页64页62页53页263页147页64页55页73页51页数模竞赛(27)
Matlab求解
非线性方程求解
最近准备数学竞赛需要对Matlab重新进行一个系统的学习,于是将在学习中学到的东西以博客的形式记录一下,这里介绍的是Matlab中的非线性方程求解
对Matlab非线性方程求解的概括
Matlab符号法
-x0 = [-5;-5];
options = optimset('Display','iter');
[x,fval] = fsolve(@myfunction,x0,options);
%function F = myfunction(x)
%F = [2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))];
-x = fzero('x^4+5*x^2+3*x-20',-2);
-[x] = roots([1 0 5 3 -20]);
a = 'x^2 + sqrt(5)*x = -1';
b = 'x + 3*z^2 = 4';
c = 'y*z + 1 = 0';
[u,v,w] = solve(a,b,c);
[x] = solve('x^3-x-1=0');
-newton('f','df',1.2,10^(-6),10)
这里的newton算法:
-function [p1,err,k,y] = newton(f,df,p0,delta,max1)
p0,feval(f,p0)
for k = 1:max1
p1 = p0 - feval(f,p0)/feval(df,p0);
err = abs(p1 - p0);
p1,err,k,y = feval(f,p1)
if(err&delta)|(y == 0)
p1,err,k,y = feval(f,p1)
-function y = f(x)
y = x^3 - 3*x + 2;
-function y = df(x)
y = 3*x^2 - 3;
迭代算法:
-function [p0,k,err,p] = fixpt(g,p0,tol,max1)
P(1) = p0;
for k = 2:max1
P(k) = feval(g,P(k-1));
k,err = abs(P(k) - P(k-1))
if (err & tol)
if k == max1
disp('maximum number of iteration exceeded');
二分算法:
-function [c,err,yc] = bisect(f,a,b,delta)
if nargin & 4 delta = 1e-10;end
ya = feval(f,a);
yb = feval(f,b);
if yb == 0
if ya*yb&0
disp('(a,b)不是有根区间');
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
elseif yb*yc & 0
if(b-a) & delta
k = (a+b)/2;
c = (a+b)/2;
err = abs(b-a);
yc = feval(f,c);
弦位算法:
-function [p1,err,k,y] = secant(f,p0,p1,delta,max1)
p0,p1,feval(f,p0),feval(f,p1),k=0,
for k = 1:max1
p2 = p1 - feval(f,p1)*(p1-p0)/(feval(f,p1)-feval(f,p0));
err = abs(p2 - p1);
p1,err,k,y=feval(f,p1)
if(err & delta) | (y == 0)
代码下载地址:
原文地址:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8531次
排名:千里之外
原创:30篇
(11)(27)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'1907人阅读
Matlab(14)
Matlab中提供了许多求解非线性方程(y=f(x))的函数,刚开始使用,真的非常困惑,所有,这里根据matlab的help文档对这些函数做一些小小的总结
fsolve函数
用来求解非线性方程组:F(x)=0;其中,x是一个向量或者矩阵,F(x)的返回值是一个vector,下面是具体用法(以x0为初始点,利用优化算法寻找函数fun(x)与y=0的交点,即fun(x) = 0的根):
局限性:只能求解距离给定初始值最近的那个根
一个方程的情况
fun=x2+x+1
在新的m文件中,书写该fun的计算函数
function y = fun(x)
y = x^2+x-6;
初值为-1时:
x = fsolve(@fun,-1)
结果为:result=-3
初值为2时:
x = fsolve(@fun,2)
结果为:result=2
可以看到,当给定的初始值不同时,fsolve的返回值不同,这是因为,fsolve返回的是距离给定初始点较近的那个根(fsolve在计算时,由初始点开始,逐步向零点逼近,当找到零点值后,优化停止,所以,这样的方式只能返回距离给定初始值x0最近的那个零点)
options参数
这里在求解根的时候,所有的优化参数都是使用的默认值,但实际上,优化参数可以通过options进行设置,可以设置具体优化方法(Algorithm)、是否显示每步迭代的结果(Display)、最大迭代步数(MaxIter)等, 设置方法如下:
options = optimoptions('','','')
x = fsolve(@fun,2,options )
方程组(以包含两个方程的方程组为例)
y={&y1=x21+x1-6=0y2=2x22+x2-6=0
在新的m文件中,书写该fun的计算函数
function y = fun(x)
y(1) = x(1)^2+x(1)-6;
y(2) = 2*x(2)^2+x(2)-6;
初值为[-1,1]时:
x = fsolve(@fun,[-1,1])
结果为:result=[-3,1]
初值为[2,-1]时:
x = fsolve(@fun,2)
结果为:result=[2,-2]
用来求解非线性方程的根f(x)=0;该函数通过判断f(x)的符号是否发生变化来计算方程的根
具体地,如果x0是方程的根,那么,该函数在点x0+Δ和x0-Δ处的函数值符号一定相反,所以,该函数不能用来求解类似于x2=0这样的方程
局限性:只能求解距离给定初始值最近的那个根(与fsolve的局限性形同)
下面给出一个例子:
fun=x2+x+1
在新的m文件中,书写该fun的计算函数
function y = fun(x)
y = x^2+x-6;
初值为-1时:
x = fzero(@fun,-1)
结果为:result=-3
初值为2时:
x = fzero(@fun,2)
结果为:fzero=2
初值为区间[-5,5]时:
x = fzero(@fun,[-2,5])
结果为:fzero=2
注意:当给定fzero为初识区间时,要求fun函数在区间的两个端点的符号不同
可以看到,利用该方法求得的结果与利用fsolve的结果相同,也是只能返回距离给定初始值较近的那个根
options参数
这里的options参数与fsolve的设置方法相同,例如:
options = optimoptions('','','')
x = fzero(@fun,2,options )
该函数用来求解多项式方程的根,roots可以返回多项式函数的所有根,例如,计算如下多项式方程的根:
使用方法如下:
roots([1 0 0 2])
这里的[1 0 0 -2]分别是x3、x2、x1、x0的系数,结果为:
-1.2599 + 0.0000i
0.6300 + 1.0911i
0.6300 - 1.0911i
该函数用来求解符号多项式方程的根,root可以返回符号多项式函数的所有符号根,例如,计算如下多项式方程的根:
使用方法如下:
p = x^3 + 2;
result = root(p,x)
% or result = root(x^3 + 2,x)
root(x^3 + 2, x, 1)
root(x^3 + 2, x, 2)
root(x^3 + 2, x, 3)
该结果是符号计算结果(即result是符号变量),如果只是需要该结果作为中间过程,那么直接将result带入其他计算过程即可,但如果需要该result的数值结果,那么可以使用vpa函数,具体地:
result_vpa = vpa(result)
结果如下:
result_vpa =
-1.6072782
0. + 1.6141898i
0. - 1.6141898i
这三个数值就是多项式方程fun=x3+2=0的三个根
可以看到,与roots的计算结果相同
方程求解函数小结
fsolve:计算非线性方程组的某个根(距离初始值较近的)
fzero:计算非线性方程的某个根(距离初始值较近那个)
roots:计算多项式方程的所有根
root:计算符号多项式方程的所有根
Matlab的函数曲线绘制
ezplot函数
绘制函数曲线explot(fun)
默认的显示区间是[-2pi, 2pi]
实际中,可以设置显示区间,利用explot(fun,[xmin,xmax])
绘制’显示函数’曲线(y=x2)
eg1: explot('x^2')
结果如下:
可以看到,由于没有指定曲线的x取值范围,所以是默认值[-6.28,6.28]
eg2: explot('x^2',[-1,1])
结果如下:
可以看到,由于设定了区间[-1,1],所以x轴只在区间[-1,1]内显示
绘制’显示函数’曲线(x2-y=0)
eg1: explot('x^2-y')
结果如下:
可以看到,由于没有指定曲线的x取值范围,所以是x、y轴的默认值都是[-6.28,6.28]、[-6.28,6.28]
eg2: explot('x^2',[-1,1,-1,1])
结果如下:
可以看到,由于设定了区间[-1,1,-1,1],所以x轴、y轴在区间[-1,1,-1,1]内显示
利用函数句柄
首先,定义函数句柄
fh = @(x,y) x.^2 + y.^3 - 2*y - 1;
然后利用ezplot绘制该函数
ezplot(fh)
axis equal
实验结果如下:
加入区间限制后
ezplot(fh[-10,10,-10,10])
axis equal
实验结果如下:
可以看到,只显示了区间[-10,10,-10,10]的图像
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:434692次
积分:3762
积分:3762
排名:第8804名
原创:139篇
转载:10篇
评论:68条
(1)(1)(3)(1)(9)(2)(9)(9)(26)(85)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'MATLAB求解非线性方程(转)
最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法:
(1)x=inv(A)*b —
采用求逆运算解方程组;
(2)x=A — 采用左除运算解方程组。
2x1+3x2=13
&&A=[1,2;2,3];b=[8;13];
&&x=inv(A)*b
即二元一次方程组的解x1和x2分别是2和3。
对于同学问到的用matlab解多次的方程组,有符号解法,方法是:先解出符号解,然后用vpa(F,n)求出n位有效数字的数值解.具体步骤如下:
第一步:定义变量syms x y z ...;
第二步:求解[x,y,z,...]=solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN');
第三步:求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);...。
如:解二(多)元二(高)次方程组:
x^2+3*y+1=0
y^2+4*x+1=0
解法如下:
&&[x,y]=solve('x^2+3*y+1=0','y^2+4*x+1=0');
&&x=vpa(x,4);
&&y=vpa(y,4);
1.635+3.029*i
1.635-3.029*i
1.834-3.301*i
1.834+3.301*i
二元二次方程组,共4个实数根;
还有的同学问,如何用matlab解高次方程组(非符号方程组)?举个例子好吗?
解答如下:
基本方法是:solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,求解变量分别v1,v2,…,vn。
具体例子如下:
x^2 + x*y + y = 3
x^2 - 4*x + 3 = 0
[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')
运行结果为
即x等于1和3;y等于1和-1.5
= solve('x^2 + x*y + y = 3','x^2 - 4*x + 3=
0','x','y')
结果一样,二元二方程都是4个实根。
通过这三个例子可以看出,用matlab解各类方程组都是可以的,方法也有多种,只是用到解方程组的函数,注意正确书写参数就可以了,非常方便。
from:http://bbs./pc/pccon.php?id=950&nid=14498&tid=0
2、变参数非线性方程组的求解
对于求解非线性方程组一般用fsolve命令就可以了,但是对于方程组中某一系数是变化的,该怎么求呢?
%定义方程组如下,其中k为变量
function F = myfun(x,k)
Pc0=0.23;W=0.18;
F=[Pc0+H*(1+1.5*(x(1)/W-1)-0.5*(x(1)/W-1)^3)-x(2);
x(1)-k*sqrt(x(2))];
Pc0=0.23;W=0.18;
x0 = [2*W; Pc0+2*H]; %
optimset('Display','off');
k=0:0.01:1; % 变量取值范围[0
for i=1:1:length(k)
x = fsolve(@(x) myfun(x,kk), x0,
options);%求解非线性方程组
x1(i)=x(1);
x2(i)=x(2);
plot(k,x1,'-b',k,x2,'-r');
xlabel('k')
legend('x1','x2')
from:/archiver/tid-836299.html
3、非线性方程数值求解
matlab里solve如何使用,是否有别的函数可以代替它.
matlab里我解y=9/17*exp(-1/2*t)*17^(1/2)*sin(1/2*17^(1/2)*t)=0这样的方程为什么只得到0这一个解,如何可以的到1/2*17^(1/2)*t=n*(pi)这样一族解??
在matlab里面solve命令主要是用来求解代数方程(即多项式)的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。(该问题给出的方程就是典型的超越方程,非代数方程)
从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。matlab也不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个:fzero和fsolve,具体用法请用help或doc命令查询吧。如果还是不行,你还可以将问题转化为非线性最优化问题,求解非线性最优化问题的最优解,可以用的命令有:fminbnd,
fminsearch, fmincon等等。
*非线性方程数值求解
*单变量非线性方程求解
在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:
z=fzero('fname',x0,tol,trace)
其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace
指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。
例 求f(x)=x-10x+2=0在x0=0.5附近的根。
步骤如下:
建立函数文件funx.m。
function fx=funx(x)
fx=x-10.^x+2;
(2) 调用fzero函数求根。
z=fzero('funx',0.5)
**非线性方程组的求解
对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为:
X=fsolve('fun',X0,option)
其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。
optimset(‘Display’,‘off’)将设定Display选项为‘off’。
例 求下列非线性方程组在(0.5,0.5) 附近的数值解。
(1) 建立函数文件myfun.m。
q=myfun(p)
q(1)=x-0.6*sin(x)-0.3*cos(y);
q(2)=y-0.6*cos(x)+0.3*sin(y);
在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。
x=fsolve('myfun',[0.5,0.5]',optimset('Display','off'))
将求得的解代回原方程,可以检验结果是否正确,命令如下:
q=myfun(x)
可见得到了较高精度的结果。
from:.cn/s/blog_56ef652d0100ebew.html
4、fsolve函数解方程
[X,FVAL,EXITFLAG,OUTPUT,JACOB]=FSOLVE(FUN,X0,...)
returns the
Jacobian of FUN at X.
FUN can be specified using
x = fsolve(@myfun,[2 3
4],optimset('Display','iter'))
where myfun is a MATLAB function such
function F = myfun(x)
F = sin(x);
FUN can also be an anonymous
x = fsolve(@(x) sin(3*x),[1
4],optimset('Display','off'))
If FUN is parameterized, you can use
anonymous functions to capture the
problem-dependent parameters. Suppose
you want to solve the system of
nonlinear equations given in the
function myfun, which is parameterized
by its second argument c. Here myfun
is an M-file function such as
function F = myfun(x,c)
F = [ 2*x(1) - x(2) -
exp(c*x(1))
-x(1) + 2*x(2) -
exp(c*x(2))];
To solve the system of equations for
a specific value of c, first assign the
value to c. Then create a
one-argument anonymous function that captures
that value of c and calls myfun with
two arguments. Finally, pass this anonymous
function to FSOLVE:
c = -1; % define parameter
x = fsolve(@(x)
myfun(x,c),[-5;-5])
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 matlab中解非线性方程 的文章

 

随机推荐