楼主: wudizhao
7931 20

[问答] matlab循环求解非线性方程的问题! [推广有奖]

已卖:1份资源

教授

1%

还不是VIP/贵宾

-

威望
0
论坛币
33 个
通用积分
19.4165
学术水平
8 点
热心指数
5 点
信用等级
0 点
经验
2109 点
帖子
516
精华
0
在线时间
1489 小时
注册时间
2009-7-31
最后登录
2025-12-13

楼主
wudizhao 在职认证  发表于 2016-5-1 23:41:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
论坛里的各位大神,小弟现在我碰到一个问题,卡了四五天了。我现在需要循环求解非线性方程,举个例子,现在有一个方程alnx+bx-c=0(只是一个例子),其中a,b,c都是已知数,x是未知数,我要通过迭代的方法把x解出来。现在的问题是,a,b,c变量我都有10000条,就是说对应每个a,b,c我都要迭代解出一个解,然后这个过程重复10000次,求出一万个解,请问这个用matlab怎么做到?如果能做到,用什么函数?怎么做?请论坛里的各位大侠不吝赐教,不胜感激!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB 非线性方程 matla atlab 线性方程 matlab

沙发
crossbone254 发表于 2016-5-1 23:53:33
用fzero函数,直接就可以求解,不需要什么循环

藤椅
wudizhao 在职认证  发表于 2016-5-2 06:29:57 来自手机
crossbone254 发表于 2016-5-1 23:53
用fzero函数,直接就可以求解,不需要什么循环
那我有一万条数据,参数值a,b,c怎么写?写成向量的形式吗?初始值也是一列向量或者数组的形式吗?

板凳
crossbone254 发表于 2016-5-2 09:12:22
wudizhao 发表于 2016-5-2 06:29
那我有一万条数据,参数值a,b,c怎么写?写成向量的形式吗?初始值也是一列向量或者数组的形式吗?
是的,最简单的是用3个向量存储好a,b,c的一万个值,然后用循环,每次掉用一组放进fzero里面求解

报纸
wudizhao 在职认证  发表于 2016-5-2 14:52:59 来自手机
crossbone254 发表于 2016-5-2 09:12
是的,最简单的是用3个向量存储好a,b,c的一万个值,然后用循环,每次掉用一组放进fzero里面求解
那还是要用自己写循环吗?还是自动就循环了?

地板
crossbone254 发表于 2016-5-2 16:02:08
wudizhao 发表于 2016-5-2 14:52
那还是要用自己写循环吗?还是自动就循环了?
自己写

7
wudizhao 在职认证  发表于 2016-5-2 21:38:02 来自手机
crossbone254 发表于 2016-5-2 16:02
自己写
小弟实在愚钝,能否麻烦大侠写一段示范程序,在下不胜感激,谢谢!

8
crossbone254 发表于 2016-5-2 23:15:33
重新看了下,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));
end

上面的fsolve里面的1是可以改动的,这个位置的值是初始值的意思,就是一个你猜测的解,可以换成一个你觉得使得方程比较接近0的数值,可能会算得快些,fzero需要两个初始值,在这里比较难满足,所以改用fsolve。我自己给a,b,c随机赋了10个值算发现可能有解不出来的,那种情况给出的是程序终止时的值(每用完1次fsolve主窗口会有一段文字告诉你是解出来还是没解出来,但是等你1万个循环完那里1万段你估计没法一个个确定了),应该可以改代码使得这种情况给出提示或者给x赋特殊值使得看得出来,但是这个函数我研究不深,想不出怎么解决,你可以自己看help再钻研一下。

9
wudizhao 在职认证  发表于 2016-5-3 04:45:29 来自手机
crossbone254 发表于 2016-5-2 23:15
重新看了下,fsolve函数更适合些

假设你的 a b c都已经生成好,都是10000行的列向量
好的,谢谢大师,万分感谢!!

10
wudizhao 在职认证  发表于 2016-5-3 08:31:29 来自手机
crossbone254 发表于 2016-5-2 23:15
重新看了下,fsolve函数更适合些

假设你的 a b c都已经生成好,都是10000行的列向量
等我有电脑的时候一定加你为好友!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 16:17