2014-07-07 49 views

回答

0
In[1]:= n = 4; 
f[x_, y_] := x^2 + y^2; 
A = Normal[SparseArray[{ 
    {i_,i_}/;i>1 -> f[x,y]+ d[i], 
    {i_,j_}/;j-i==1 -> u[i], 
    {i_,j_}/;i-j==1 -> l[i-1], 
    {1, 1} -> Integrate[f[x,y]+d[1], {x,0,1}, {y,0,1}]}, 
    {n, n}]] 

Out[3]= {{2/3+d[1], l[1],   0,   0}, 
     {u[1],  x^2+y^2+ d[2], l[2],   0}, 
     {0,   u[2],   x^2+y^2+d[3], l[3]}, 
     {0,   0,    u[3],   x^2+y^2+d[4]}} 
+0

謝謝。我認爲,這工作正常。 但是,我該怎麼做整合?不應該''A需要參數'x'和'y'? – hbaromega

+0

除非我誤解了這個問題,否則它會進行積分,矩陣的左上角是結果2/3 + d [i] oops,應該是2/3 + d [1],編輯和校正現在。我不明白你爲什麼認爲A需要論證,它只是一個矩陣。你可以用A [[2,3]]提取元素,但這是我猜測你可能會想到的唯一的東西。如果你的意思不止於此,那麼你需要解釋你在想什麼。 Mathematica不是一種正常的編程語言,如果這是你的背景和你來自哪裏。許多事情是不同的。 – Bill

+0

對不起,我上次可能錯過了集成,或者它不在那裏。 假設我在一個時間點構造矩陣,然後在一個時間點,我想做整合。爲此,我不需要在LHS上定義'A'作爲函數:'A [x_,y_]',然後積分[A [[1,1]],{x,0, 1},{y,0,1}]'? 讓我知道如果我仍然聽起來很模糊。 Btw什麼'普通'做什麼? – hbaromega

0

Band爲這個專門定製:

[email protected]_Integer?Positive := 
SparseArray[ 
    { [email protected]{1, 1} -> f[x, y] + Array[d, n] 
    , [email protected]{1, 2} -> Array[u, n - 1] 
    , [email protected]{2, 1} -> Array[l, n - 1]} 
, {n, n}] 

檢查出來(無需定義fdul):

[email protected] // MatrixForm 

注意MatrixForm不應該成爲定義的一部分。例如,設置A = (something) // MatrixForm是個不錯的主意。你將得到一個MatrixForm對象而不是一個表格(=數組數組)或一個稀疏數組,它的唯一目的是在FrontEnd中打印出來。在計算中嘗試使用MatrixForm會產生錯誤,並會導致不必要的混淆。

整合元件的{1, 1}

[email protected]_Integer?Positive := 
MapAt[ 
    Integrate[#, {x, 0, 1}, {y, 0, 1}]& 
, [email protected] 
, {1, 1}] 

你可以檢查出來,而不定義fd,以及:

[email protected] 

後者的操作,但是,看起來很可疑。例如,它不會離開您的矩陣(或其對應的線性系統)不變w.r.t.合理的轉變。 (這個操作甚至不保存矩陣的線性。)你可能不想這樣做。

上述評論評論:沒有必要定義A[x_, y_] := …Integrate[A[[1,1]], {x,0,1}, {y,0,1}]。請注意,A[[1,1]]A[1, 1]完全不同:前者是Part[A, 1, 1],它是表A的某個元素。 A[1, 1]是一個不同的表達式:如果A是某個表,那麼A[1, 1](that table)[1, 1],這是一個有效的表達式,但通常被認爲是無意義的。

相關問題