2011年12月14日 星期三

Re: [問題] 指定變值

作者: chungyuandye (養花種魚數月亮賞星星) 看板: Mathematica
標題: Re: [問題] 指定變值
時間: Thu Dec 1 21:15:24 2011

※ 引述《qoodeva (發呆的花枝)》之銘言:
: 依邊界條件而改變的材料變數
: 第一組
: ω=6;
: λ=10;
: x=0.41;
: 第二組
: ω=7;
: λ=128;
: x=0.2;
: 第三組
: ω=9;
: λ=4800;
: x=0.1;
: =========(主程式部分)=========================================
: eqn1=6ωa x+7λb ;
: eqn2=8λa +12ωb x ;
: 將eqn1,eqn2的a,b排成係數矩陣
: 6ω x 7λ
: BB= ( )
: 8λ 12ω x
: Eigensystem[BB][[1]] (特徵值)
: {0.08,0,004}
: Eigensystem[BB][[2]] (特徵向量)
: 特徵值對應到的特徵向量
: ����������
: ↓ ↓
: {{0.008,0.004},{{0.811,0.841},{0.647,0.881}}}
: ↑ ↑
: ��������������
: 選取Eigensystem[BB][[1]]中最小值,
: 所對應到Eigensystem[BB][[2]]之特徵向量即為a,b之值。
: a=Eigensystem[BB][[2,2,1]];
: b=Eigensystem[BB][[2,2,2]];
: 再將得到的a,b值反帶回eqn1可得一條function[x]的函數xop。
: xop=eqn1/.{a->a,b->b}
: ==============================================================================
: 現在我每次改變材料變數時都可以得到一條f[x]的函數,
: 並利用這個函數作圖,最後將這三組所得到的圖形繪製一起。
: 我想請問版上高手
: 1.我只能一次一次的改變數值去得到這三條方程式,
: 是否有什麼特殊指令可以更簡潔的計算一次得到這三組函數,
: 一開始有想到用map可是它是取矩陣中的元素去運算,
: 我的目的是像Do迴圈這樣,可是我的值是只能選取特定的值。

eqn1=6\[Omega]*a*x+7\[Lambda]*b;
eqn2=8\[Lambda]*a+12\[Omega]*bx;

test[fun1_,fun2_,w_,l_,xx_]:=
Block[{a,b,BB,BE,coa,cob,eqn1temp,\[Omega],\[Lambda],x,y,
eqn11,eqn22},
eqn1temp=fun1/.x->y;
\[Omega]=w;\[Lambda]=l;x=xx;
eqn11=fun1;eqn22=fun2;
BB={Coefficient[eqn11,#]&/@{a,b},
Coefficient[eqn22,#]&/@{a,b}};
BE=Eigensystem[BB];
{coa,cob}=Sort[Transpose@BE][[1,2]];
eqn1temp/.{a->coa,b->cob}
]

data = {{6, 10, 0.41}, {7, 128, 0.2}, {9, 4800, 0.1}};

Plot[test[eqn1, eqn2, #[[1]], #[[2]], #[[3]]] & /@ data, {y, 0, 1}]


: 2.選取Eigensystem[BB][[1]]中最小值,
: 所對應到Eigensystem[BB][[2]]之特徵向量即為a,b之值。
: 要怎麼自動選取最小特徵值所對應到的特徵向量,
: 用Min[]選結果都是選到{}內最小的值=_=

先轉置,在用Sort排序,第一個就是

: 3.另外請教一下,當我使用Do迴圈所得到的大量數據,
: 是否能用成表格表示??

只有想不到,沒有做不到

myresult={#[[1]],#[[2]],#[[3]],
test[eqn1,eqn2,#[[1]],#[[2]],#[[3]]]}&/@data

TableForm[myresult,TableHeadings->{Range[Length@myresult],{"\[Omega]",
"\[Lambda]","x","xop"}}]

--
養花種魚數月亮賞星星

http://chungyuandye.twbbs.org


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.131.111
推 qoodeva:謝謝老師,實在太厲害了@@  12/01 21:19
推 qoodeva:老師請教一下,當中的eqn11是指eqn1嗎??  12/01 23:10
推 LPH66:不是的 仔細看 Block 裡有宣告 eqn11 和 eqn22 為暫時變數  12/02 00:22

沒有留言:

張貼留言