查看: 592|回復: 11|關注: 0
打印 上一主題 下一主題

[已解決] 求助 求一元三次方程的根,一組數的情況解不出來

[復制鏈接]

新手

20 麥片

財富積分


050


5

主題

23

帖子

0

最佳答案
  • 關注者: 1
跳轉到指定樓層
1#
首先自建了函數如下:

function [y]= mysolve(a)
syms x
y = solve(-0.0691*x^3+1.4187*x^2-9.8234*x+25.341-a) ;
y=vpa(y)
end

然后調用如下:
A=[1,2,3,4,5]
y=mysolve(A)
結果是:
A =
     1     2     3     4     5

y =

Empty sym: 0-by-1


y =

Empty sym: 0-by-1

但是如果只求一個數,比如:
A=1
y=mysolve(A)
可以解出來:
A =
     1

y =

                                      9.3752836305231016569565184927615
5.5779153482695634985839694077437 - 2.5416269178840142082986032112777i
5.5779153482695634985839694077437 + 2.5416269178840142082986032112777i


y =

                                      9.3752836305231016569565184927615
5.5779153482695634985839694077437 - 2.5416269178840142082986032112777i
5.5779153482695634985839694077437 + 2.5416269178840142082986032112777i

這是怎么回事啊

論壇優秀回答者

5

主題

1599

帖子

444

最佳答案
  • 關注者: 129
2#
發表于 2019-8-2 09:51:21 | 只看該作者
solve 函數里面的是一元三次方程,要求a是標量
當a是多個數值時,老老實實寫循環挨個求,否則就成了方程組了
提問請:①準確描述問題②貼代碼別貼代碼的截圖③勿一問多帖或一帖多問④及時反饋⑤看清回復的每個字

新手

20 麥片

財富積分


050


5

主題

23

帖子

0

最佳答案
  • 關注者: 1
3#
 樓主| 發表于 2019-8-2 10:10:55 | 只看該作者
那要是
A=[1,2,3,4,5]
y=A+1
為什么也可以得到結果

新手

20 麥片

財富積分


050


5

主題

23

帖子

0

最佳答案
  • 關注者: 1
4#
 樓主| 發表于 2019-8-2 10:42:26 | 只看該作者
TouAkira 發表于 2019-8-2 09:51
solve 函數里面的是一元三次方程,要求a是標量
當a是多個數值時,老老實實寫循環挨個求,否則就成了方程組 ...

那要是
A=[1,2,3,4,5]
y=A+1
為什么也可以得到結果

論壇優秀回答者

5

主題

1599

帖子

444

最佳答案
  • 關注者: 129
5#
發表于 2019-8-2 11:04:40 | 只看該作者
oda24 發表于 2019-8-1 22:42
那要是
A=[1,2,3,4,5]
y=A+1

上面不是講過了嗎?

否則就成了方程組


對y=[1,2,3,4,5]+1求解,本質是求一個線性方程組,這個線性方程組有唯一解

但是-0.0691*x.^3+1.4187*x.^2-9.8234*x+25.341-a==0這個非線性方程,在a為向量的時候,相當于求解
[-0.0691*x.^3+1.4187*x.^2-9.8234*x+25.341-a(1)==0;
-0.0691*x.^3+1.4187*x.^2-9.8234*x+25.341-a(2)==0;
...
-0.0691*x.^3+1.4187*x.^2-9.8234*x+25.341-a(end)==0]
想要令同一個x值卻能滿足a向量中不同值構成的方程組,這個非線性方程組是無解的
提問請:①準確描述問題②貼代碼別貼代碼的截圖③勿一問多帖或一帖多問④及時反饋⑤看清回復的每個字

新手

20 麥片

財富積分


050


5

主題

23

帖子

0

最佳答案
  • 關注者: 1
6#
 樓主| 發表于 2019-8-2 11:15:04 | 只看該作者
TouAkira 發表于 2019-8-2 11:04
上面不是講過了嗎?

我寫了個循環可是還是有問題您能幫我看看嗎:
A=xlsread('a.xlsx')
for data=A;
    y=mysolve(data);
    result = y(find(imag(y) == 0)) %去除復數解
end   

這里面a.xlsx表格中就一列,是1 2 3 4 5 6
可是這樣解出來還是如下:
A =

     1
     2
     3
     4
     5
     6


result =

Empty sym: 0-by-1

論壇優秀回答者

5

主題

1599

帖子

444

最佳答案
  • 關注者: 129
7#
發表于 2019-8-2 11:21:38 | 只看該作者 |此回復為最佳答案
oda24 發表于 2019-8-1 23:15
我寫了個循環可是還是有問題您能幫我看看嗎:
A=xlsread('a.xlsx')
for data=A;

直接
  1. A = [1,2,3,4,5];
  2. syms x real
  3. for ii = 1:1:numel(A)
  4.     a = A(ii);
  5.     y(ii) = double( solve([-0.0691*x.^3+1.4187*x.^2-9.8234*x+25.341-a==0],[x]) );
  6. end
復制代碼

y =   9.375283630523102   8.353558307896433   5.068078616287090   4.193048207382911   3.661745994534145
提問請:①準確描述問題②貼代碼別貼代碼的截圖③勿一問多帖或一帖多問④及時反饋⑤看清回復的每個字

新手

20 麥片

財富積分


050


5

主題

23

帖子

0

最佳答案
  • 關注者: 1
8#
 樓主| 發表于 2019-8-2 11:26:52 | 只看該作者
TouAkira 發表于 2019-8-2 11:21
直接

y =   9.375283630523102   8.353558307896433   5.068078616287090   4.193048207382911   3.6617 ...

我想從excel中導入這幾個數據,所以想用A=xlsread('a.xlsx')

論壇優秀回答者

5

主題

1599

帖子

444

最佳答案
  • 關注者: 129
9#
發表于 2019-8-2 11:35:03 | 只看該作者
oda24 發表于 2019-8-1 23:26
我想從excel中導入這幾個數據,所以想用A=xlsread('a.xlsx')

同學,你自己去試試把我寫的代碼最上面對A賦值的語句改成從文件導入,難道不是一樣可以運行嗎?
我反復強調的無非是“挨個求解”這個思路方向
具體實現過程,難道你就不能發揮主觀能動性,進行必要的修改和調整?
提問請:①準確描述問題②貼代碼別貼代碼的截圖③勿一問多帖或一帖多問④及時反饋⑤看清回復的每個字

新手

20 麥片

財富積分


050


5

主題

23

帖子

0

最佳答案
  • 關注者: 1
10#
 樓主| 發表于 2019-8-2 11:37:44 | 只看該作者
TouAkira 發表于 2019-8-2 11:35
同學,你自己去試試把我寫的代碼最上面對A賦值的語句改成從文件導入,難道不是一樣可以運行嗎?
我反復強 ...

好的:lol
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

關閉

站長推薦上一條 /3 下一條

快速回復 返回頂部 返回列表
哪一款德州扑克还能玩