solve 函数 变量太多导致输出顺序紊乱的对策
使用solve函数解方程组=solve(Eq1,Ea2..........Eq20,a1,a2,..........a20)
有时候要解一些维数比较大的方程组,比如说变量时a1,a2,.......a20
这20个变量,在输出的时候,有可能会把真实的a1的值输出给a2上去了
有的时候甚至是全乱了(我遇到过,当时以为指定了顺序肯定没错的,没想到还是错了)
解决的方法是:
S=solve(Eq1,Ea2..........Eq20,a1,a2,..........a20);
这样解出来的S是一个结构体。
S.a1就是a1的值。
具体关于结构体的知识,请别人解释,我还不懂。
回复 楼主 beyondhxf 的帖子
真的这样!?汗, 这块个人算初级而已
可否举例说明! 也好学习学习!
回复 沙发 ChaChing 的帖子
简例如下:>> syms x y
>> =solve(x+y-1,x+1,x,y)
x =-1
y =2
如果这样输入:
syms x y
>> =solve(x+y-1,x+1,y,x)
y =-1
x =2
第二次的结果是错的,对吧?
其实像这种简单的情况,我们一眼就看出来端倪。
可是我自己编了一个程序,其中算法内容不便公布。
在程序中就有一个10元1次方程组,我把变量的顺序是规规矩矩的正常顺序,没想到还是对错号了。
其实我那段程序查错查了一下午,一度认为是算法的问题,最终在用matlab和mathematica的结果比较才发现是solve的问题。
所以我觉得这个问题还是存在的,也许matlab可能给了其它的默认顺序,我不知道而已。提供1楼的方法供参考。
[ 本帖最后由 beyondhxf 于 2009-12-31 09:37 编辑 ] .
Matlab确实给了默认顺序,是按字母排序的,这个问题Help里讲得很清楚了。
回复 地板 messenger 的帖子
是,可是我的变量也有字母上的顺序,是:a1,a2,a3,........a10可还是乱了。 按字母顺序,a10是排在a2前面的,电脑上排序是先比较第1位,然后再比较第2位、再比较第3位......。
回复 板凳 beyondhxf 的帖子
虽然1F给了奖励, 其实2F说明个人是有点怀疑!?并非怀疑说明的现象, 只是不太相信matlab软件会有如此不确定情况! 还是messenger仔细些, 昨晚太累了, 没看出!
还有LZ举的例子(=solve(x+y-1,x+1,y,x)), 有个严重的误解!
左侧是因使用者的赋值造成! 不管左侧怎给变数, 总是第一个赋值x而第二个赋值y! 希望有说清楚, LZ能了解!
回复 7楼 ChaChing 的帖子
那你告诉我,如果变量是a1,a2,a3....................a10怎么个顺序?
是不是从a1到a10按顺序排下来?
结果我做的不是!乱了。
源码不给出,但是你可以自己做一个例子试试。
回复 8楼 beyondhxf 的帖子
不是6F说的那个样吗?:@)[ 本帖最后由 ChaChing 于 2009-12-31 20:54 编辑 ]
回复 7楼 ChaChing 的帖子
不再讨论这事了,我那个例子举得太烂,本身有问题,但是我发帖的目的不是为了说我3楼的例子,而是为了告诉大家,变量多了的时候,特别是变量名千奇百怪,没有什么规律,又或者你自己认为的规律和MATLAB默认的有冲突,而造成误解,最终导致结果紊乱的特殊情况。其实就算你知道了6楼的情况,你还是要在赋值前先算好顺序,10个变量不算多,也不少,那20个变量那?200个变量那?你先算好再输出,恐怕十分困难,也容易出错。我的帖子是无需事先计算变量顺序的,当你遇到很多变量的时候,我提供的那个方法也会奏效。[ 本帖最后由 beyondhxf 于 2010-1-1 12:58 编辑 ] 嗯,对你的那个方法还是持肯定态度的。正常的学术讨论,错的地方要指出,好的方法要赞赏。反正如果我有错的地方,希望别人指出来,总比一直错下去要好。的确,你的方法对变量比较多的情况比较有效。
页:
[1]