24小时热门版块排行榜    

查看: 3304  |  回复: 44

daicong

木虫 (小有名气)


[交流] Matlab: 实现任意个方程之间求解。

假设存在m个n元方程:
则在这m个方程里对任意n个方程求解有可能得到一组解,也可能不存在,并记录下所有的可行解。

望高手提示如何编写这样的程序。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


求给力,谢谢。
5楼2012-07-11 08:47:01
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong(金币+1): 谢谢参与
就是解方程组啊,肯定可以,但是有的不一定能求出解析解。
10楼2012-07-11 09:37:49
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
10楼: Originally posted by csgt0 at 2012-07-10 13:37:49
就是解方程组啊,肯定可以,但是有的不一定能求出解析解。

当然是解方程,问题是如何通过编程自动解决。
我只要输入方程即可。
然后给出一系列的可行解。
11楼2012-07-11 11:28:42
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
10楼: Originally posted by csgt0 at 2012-07-10 13:37:49
就是解方程组啊,肯定可以,但是有的不一定能求出解析解。

当然是解方程,问题是如何通过编程解决:
我只要输入方程,然后给出一系列的可行解。
12楼2012-07-11 11:30:00
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
11楼: Originally posted by daicong at 2012-07-11 11:28:42
当然是解方程,问题是如何通过编程自动解决。
我只要输入方程即可。
然后给出一系列的可行解。...

为什么不能自动解决,你的方程写不出来?还是不知道怎么写,怎么写得看具体的方程吧。
13楼2012-07-11 11:43:45
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)



daicong(金币+1): 谢谢参与
这属于某种反演问题了,属于专门的研究课题了。不是三下五除二能搞定的。
18楼2012-07-11 19:25:03
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

hhlxg

金虫 (小有名气)



daicong(金币+1): 谢谢参与
求解有限个的方程做过,像你描述的这个有难度,关键是程序能自己识别的有限。
19楼2012-07-11 20:08:05
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
19楼: Originally posted by hhlxg at 2012-07-11 00:08:05
求解有限个的方程做过,像你描述的这个有难度,关键是程序能自己识别的有限。

目前我只做线性方程,比如:
A*x=b,方程组用矩阵表示。A,b为已知量,x是需要求的。
例如(举一个例子):
5*x1+3*x2-4*x3=5;
6*x1+3*x2-2*x3=3;
13*x1+2*x2-9*x3=13;
76*x1+43*x2-24*x3=32;
24*x1+43*x2-23*x3=43;
从这五个方程中任意选出三个方程则可能求得一组解。
我现在对这样的编程还没有很好的算法。
20楼2012-07-11 22:44:03
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
18楼: Originally posted by baobiao007 at 2012-07-10 23:25:03
这属于某种反演问题了,属于专门的研究课题了。不是三下五除二能搞定的。

目前可以读取全部的方程,但问题是不知道如何智能的选择n个方程求解。并且还要能判断是否存在解,因为不是每n个方程组都有可行解的。
22楼2012-07-11 23:02:43
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

huiquan0918

捐助贵宾 (职业作家)



daicong(金币+1): 谢谢参与
看蒙圈了……
23楼2012-07-11 23:11:39
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

hhlxg

金虫 (小有名气)



dbb627: 金币+1, 感谢应助 2012-07-12 09:57:19
引用回帖:
20楼: Originally posted by daicong at 2012-07-11 22:44:03
目前我只做线性方程,比如:
A*x=b,方程组用矩阵表示。A,b为已知量,x是需要求的。
例如(举一个例子):
5*x1+3*x2-4*x3=5;
6*x1+3*x2-2*x3=3;
13*x1+2*x2-9*x3=13;
76*x1+43*x2-24*x3=32;
24*x1+43*x2-23*x ...

如果是你描述的是线性方程组的话
用矩阵求解就可以了
A*x=b
x=[A]'b
[A]'为矩阵A的逆矩阵
[5 3 -4;6 6 -2;13 2 -9]x=[5;3;13]
>> A=[5 3 -4;6 6 -2;13 2 -9]

A =

     5     3    -4
     6     6    -2
    13     2    -9

>> b=[5;3;13]

b =

     5
     3
    13

>> x=A^-1*b

x =

    0.4184
   -0.2143
   -0.8878
24楼2012-07-12 06:43:03
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
24楼: Originally posted by hhlxg at 2012-07-11 10:43:03
如果是你描述的是线性方程组的话
用矩阵求解就可以了
A*x=b
x='b
'为矩阵A的逆矩阵
x=
>> A=

A =

     5     3    -4
     6     6    -2
    13     2    -9

>> b=

b =

      ...

我知道这样解,但是这只能给出一组解。也许你还没有明白我的意图,我是假设有m个n元方程,然后由程序算出可能的所有解。不是自己一个一个去试。需要智能的。
25楼2012-07-12 22:58:17
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wanghao9999

木虫 (著名写手)



daicong(金币+1): 谢谢参与
应该能解出,但是有的不一定能求出解析解,能否具体描述下问题
26楼2012-07-12 23:51:58
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
26楼: Originally posted by wanghao9999 at 2012-07-12 03:51:58
应该能解出,但是有的不一定能求出解析解,能否具体描述下问题

目前我只做线性方程,比如:
A*x=b,方程组用矩阵表示。A,b为已知量,x是需要求的。
例如(举一个例子):
5*x1+3*x2-4*x3=5;
6*x1+3*x2-2*x3=3;
13*x1+2*x2-9*x3=13;
76*x1+43*x2-24*x3=32;
24*x1+43*x2-23*x3=43;
从这五个方程中任意选出三个方程则可能求得一组解。
我现在对这样的编程还没有很好的算法。
27楼2012-07-13 00:03:19
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

userhung

禁虫 (文学泰斗)



daicong(金币+1): 谢谢参与
解方程组哦~~~~~~~~~~~~~~~~~~~~`
28楼2012-07-13 05:53:04
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
28楼: Originally posted by userhung at 2012-07-12 09:53:04
解方程组哦~~~~~~~~~~~~~~~~~~~~`

Any idea?
29楼2012-07-13 07:06:13
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)



daicong(金币+1): 谢谢参与
引用回帖:
27楼: Originally posted by daicong at 2012-07-13 00:03:19
目前我只做线性方程,比如:
A*x=b,方程组用矩阵表示。A,b为已知量,x是需要求的。
例如(举一个例子):
5*x1+3*x2-4*x3=5;
6*x1+3*x2-2*x3=3;
13*x1+2*x2-9*x3=13;
76*x1+43*x2-24*x3=32;
24*x1+43*x2-23*x ...

你这个问题不需要什么算法,其实就是组合呗,matlab里有个函数combnk
http://www.mathworks.co.uk/help/toolbox/stats/combnk.html
然后好像你的问题就能解决了
31楼2012-07-13 23:23:44
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

zhdgzhdg

至尊木虫 (著名写手)



daicong(金币+1): 谢谢参与
没有可以判断有无解的函数,应该不能实现。
33楼2012-07-14 20:06:13
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
27楼: Originally posted by daicong at 2012-07-13 00:03:19
目前我只做线性方程,比如:
A*x=b,方程组用矩阵表示。A,b为已知量,x是需要求的。
例如(举一个例子):
5*x1+3*x2-4*x3=5;
6*x1+3*x2-2*x3=3;
13*x1+2*x2-9*x3=13;
76*x1+43*x2-24*x3=32;
24*x1+43*x2-23*x ...

大哥啊,最简单的方法你可以给每个方程一个序号,然后从这些序号中随机选就可以了。更方便点的,你构成一个m*n+1的矩阵,从其中的m行中任选k行进行行列式计算就可以了。
37楼2012-07-16 13:52:20
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
31楼: Originally posted by wangww2011 at 2012-07-13 03:23:44
你这个问题不需要什么算法,其实就是组合呗,matlab里有个函数combnk
http://www.mathworks.co.uk/help/toolbox/stats/combnk.html
然后好像你的问题就能解决了...

这个函数确实对我很有帮助,不过即使这样对整个程序来说还需要很复杂的过程。
38楼2012-07-17 01:28:37
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
37楼: Originally posted by csgt0 at 2012-07-15 17:52:20
大哥啊,最简单的方法你可以给每个方程一个序号,然后从这些序号中随机选就可以了。更方便点的,你构成一个m*n+1的矩阵,从其中的m行中任选k行进行行列式计算就可以了。...

行列式计算?
39楼2012-07-17 01:29:37
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)


★ ★ ★
daicong: 金币+3 2012-07-17 22:24:38
引用回帖:
38楼: Originally posted by daicong at 2012-07-17 01:28:37
这个函数确实对我很有帮助,不过即使这样对整个程序来说还需要很复杂的过程。...

忍不住给你写了
CODE:
A=[5 3 -4;
    6 3 -2;
    13 2 -9;
    76 43 -24;
    24 43 -23];

b=[5;3;13;32;43];


indices=combnk(1:5,3);

for i=1:length(indices)
    index=indices(i,:);
    B=A(index,:)
    if abs(det(B))>1e-12
        res=B\b(index)
    else
        det(B)
    end
   
end

40楼2012-07-17 07:17:42
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
40楼: Originally posted by wangww2011 at 2012-07-16 11:17:42
忍不住给你写了

A=;

b=;


indices=combnk(1:5,3);

for i=1:length(indices)
    index=indices(i,;
    B=A(index,
    if abs(det(B))>1e-12
        res=B\b(index)
    else
        ...

谢谢你写的代码。但我运行之后发现结果与我想象的不一样:按道理每三个方程联合求解可以得到一个解,那么这五个方程就应该有十个,当然也有可能有的三个方程没有解;但运行之后的结果只有一个解。请问这个是否有问题呢?
41楼2012-07-17 22:24:26
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)


★ ★ ★ ★ ★
daicong: 金币+5 2012-07-18 02:11:51
引用回帖:
41楼: Originally posted by daicong at 2012-07-17 22:24:26
谢谢你写的代码。但我运行之后发现结果与我想象的不一样:按道理每三个方程联合求解可以得到一个解,那么这五个方程就应该有十个,当然也有可能有的三个方程没有解;但运行之后的结果只有一个解。请问这个是否有问 ...

额 不会吧 明明有10个解的啊 至少在我电脑上就是10个解啊 matlab不可能给用户提供不一样的用户体验啊
42楼2012-07-17 23:22:13
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
42楼: Originally posted by wangww2011 at 2012-07-17 03:22:13
额 不会吧 明明有10个解的啊 至少在我电脑上就是10个解啊 matlab不可能给用户提供不一样的用户体验啊...

是有十个,不好意思,我给加上分号了。
用户体验一样,呵呵。
43楼2012-07-18 02:11:41
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

daicong

木虫 (小有名气)


引用回帖:
42楼: Originally posted by wangww2011 at 2012-07-17 03:22:13
额 不会吧 明明有10个解的啊 至少在我电脑上就是10个解啊 matlab不可能给用户提供不一样的用户体验啊...

对了,我还有个很长的代码。是计算顶点的,和这个有异曲同工之处,但那个更加复杂。我给你个链接,看你能否帮忙看看。谢谢。
http://muchong.com/bbs/viewthread.php?tid=4737207&pid=9&page=1#pid9
44楼2012-07-18 02:18:13
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)


引用回帖:
44楼: Originally posted by daicong at 2012-07-18 02:18:13
对了,我还有个很长的代码。是计算顶点的,和这个有异曲同工之处,但那个更加复杂。我给你个链接,看你能否帮忙看看。谢谢。
http://muchong.com/bbs/viewthread.php?tid=4737207&pid=9&page=1#pid9...

抱歉 不懂 呵呵
45楼2012-07-18 04:11:49
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
2012-07-11 08:16  
daicong(金币+1): 谢谢参与
范春平3楼
2012-07-11 08:42  
daicong(金币+1): 谢谢参与
范春平4楼
2012-07-11 08:43  
neu2346楼
2012-07-11 08:52  
daicong(金币+1): 谢谢参与
2012-07-11 08:57  
daicong(金币+1): 谢谢参与
2012-07-11 08:59  
daicong(金币+1): 谢谢参与
clarktao9楼
2012-07-11 08:59  
daicong(金币+1): 谢谢参与
xdkevin14楼
2012-07-11 11:56  
daicong(金币+1): 谢谢参与
59680494015楼
2012-07-11 12:09  
daicong(金币+1): 谢谢参与
zywzhangyw16楼
2012-07-11 12:29  
daicong(金币+1): 谢谢参与
郑克宁17楼
2012-07-11 12:29  
daicong(金币+1): 谢谢参与
2012-07-11 22:48  
daicong(金币+1): 谢谢参与
2012-07-13 08:46  
2012-07-13 23:47  
daicong(金币+1): 谢谢参与
2012-07-14 20:17  
daicong(金币+1): 谢谢参与
zhengkning35楼
2012-07-14 20:27  
wsh59836楼
2012-07-14 20:29  
daicong(金币+1): 谢谢参与
相关版块跳转 我要订阅楼主 daicong 的主题更新
信息提示
请填处理意见