网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月05日漏签0天
matlab吧 关注:292,724贴子:1,659,381
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回matlab吧
>0< 加载中...

求助,这是求解非线性方程组的代码,改成解有多个变量的,何解?

  • 只看楼主
  • 收藏

  • 回复
  • 湛兰新空
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
基于我现在手头的学习任务,我想把这个代码改造成可以求解含有多个乃至于成百上千个变量x1,...,xn的方程组的代码,方程组为Cx-f=0,其中C为含有变量x1,...,xn的矩阵,f为含有变量x1,...,xn的向量,但问题是,多个变量定义起来很麻烦,如何实现“syms x1 x2 ... xn;x=[x1,x2,...,xn];”?
以下是使用牛顿迭代法求解二元非线性方程组的例题代码(初值[x y]=[0 0 ],精度为1e-5):
①
function [ f,x ] = fun
syms x1 x2;
x=[x1,x2];%x为函数变量
f1=x1^2-10*x1+x2^2+8;
f2=x1*x2^2+x1-10*x2+8;
f=[f1;f2];%f为所定义的函数
end
②
function[X,time]=newton(x0,eps,N)
%x0为初始值
%eps为允许误差
%N为最大迭代次数
[f,x]=fun;
n=length(x);
for i=1:n
df(:,i)=diff(f,x(i));%按列依次求偏导
end
time=0;
while(time<=N)%进行迭代过程
fx=f;
dfx=df;
for i=1:n
fx=subs(fx,x(i),x0(i));
end
for i=1:n
dfx=subs(dfx,x(i),x0(i));%将初始值赋入,计算函数值
end
fx=eval(fx);
dfx=eval(dfx);
X=x0-dfx\fx;
time=time+1;
error=norm(X-x0);%计算误差
if error<eps %与允许误差进行比较
break;
end
x0=X;
end
if time>N
warning('超出迭代的次数');
end
③
[X,time]=newton([0;0],1e-5,100)


  • 湛兰新空
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶一下。


2026-05-05 12:41:00
广告
不感兴趣
开通SVIP免广告
  • 2010364132ab
  • 江湖少侠
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
变量定义很好定哈
n=10;x=syms('x',[1,n]);%x为函数变量
但函数不能批量定义哈,每个函数不一样
f1=x1^2-10*x1+x2^2+x3+8;
f2=x1*x2^2+x1-10*x2+x3^2+8;
f3=x1^2*x2^2+x1-10*x2+x3+8;
f4=x1^2*x2^2+x1-10*x2+x4+8;


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回matlab吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示