Re: [問題] 變數轉換 (2000P)已回收
※ 引述《kuoyfu (大頭)》之銘言:
: 小弟目前有一個問題
: 我有一個變數 x 而 N 與 M 都為 x 的函數
: 舉例來說可能我假設 N=x^6+1 M=x^5+1
: 一個R值 R=N/M
: 我對R微分 diff(R)之後
: 我希望看到的是類似 (N'*M-N*M')/M^2
: 而不是看到已經變成x的微分函數 6*x^5/(x^5+1)-5*(x^6+1)/(x^5+1)^2*x^4
: 目的主要是因為我知道的資料是 N' 與 M' 的數值 而不清楚x的值
: 現在我有想過是不是等得x的微分函數後
: 再想辦法把 6*x^5 取代成 N' 5*x^4 取代成 M'
: 不過似乎...................異想天開嗎XD
: 不知道有沒有版大有人做過類似的資料運算
: 感謝解惑!!!
: =====================================================================
: 我下午有嘗試如果我 N=sym('N(x)'); M=sym('M(x)');
: 那我使用微分後diff(R)=diff(N(x),x)/M(x)-N(x)/M(x)^2*diff(M(x),x)
: 感覺起來是有符合我想要的意思
: 不過我還是無法將diff(N(x),x)與diff(M(x),x)用數值代換掉=_=
: 好像是白做工的囧.......
: 不知道是不是這樣做讓大家有靈感了捏?!
小弟在花了一堆時間後最後還是用了很笨的方法
沒錯 我假設 N=sym('N(x)'); M=sym('M(x)'); R=N/M;
然後 diff(R,1) 得 diff(N(x),x)/M(x)-N(x)/M(x)^2*diff(M(x),x)
DR=diff(R,1);
str=char(DR);
之後是一堆 str=strrep(str,'/','./');
str=strrep(str,'*','.*');
str=strrep(str,'^','.^');
str=strrep(str,'diff(N(x),x)','DN');........................
因為DN是已知值 之後再用eval(str)答案就出來了
有版大說可以使用subs下去代換掉diff(N(x),x)
不過其實我有試過了 可能因為一開始變數假設的關係 不能用耶
或許是我沒有了解DIGI大的想法 如果DIGI大能說明一下我想會輕鬆很多
那目前這個方式可以微很多次啦 只不過在strrep的過程需要一些觀察
看那些變數需要取代 像是 diff(N(x),$(x,2)) 變成char之後 diff(N(x),'$'(x,2))
蠻特別的
今天也花了很多時間再找文章
就是在找變數假設的問題 怎樣去假設出一個變數為另一個變數的函數呢
就像是這次例子的 N 是 x 的函數一樣
N=sym('N(x)') 這個打法是我誤打誤撞弄出來的 結果似乎是有這個意思
看了HELP其實也沒發現這種例子 不知道有沒有版大可以說明或是有其他做法呢???
阿其實我這個問題主要是想要寫 Rational B-spline
不知道是不是有其他對於曲線很有興趣的朋友也曾經撰寫過呢??
來分享一下寫法吧~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.59.19
→
06/22 21:13, , 1F
06/22 21:13, 1F
→
06/22 21:19, , 2F
06/22 21:19, 2F
→
06/22 22:49, , 3F
06/22 22:49, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):