2016-03-08 63 views
0

我想問一下高效算法。 實施例ⅰ具有方程:方程的高效算法

x = y + z; 

如果變量y = 1的值,變量z = 2所以變量x是3

但如何自動如果變量x = 3和變量得到的Y值用這個方程z = 2?無需創建新的等式y = x - z

我希望可以使用C#或JavaScript獲取示例代碼。

又如,如果方程是

a = (((x + y - z)/2)*10)^4 

方程式從程序,用戶提交的3個可變因素值。 用戶提交變量(X,Y,Z)或(Y,Z,a)或(Z,A,X)或(a,X,Y)

如果變種的x,y和z的用戶輸入值,程序可以用該方程顯示a的值。沒有創建一個= ...

如果var y,z和a的用戶輸入值,程序可以用該等式顯示x的值。如果沒有創建x = ...

如果var z,a和x程序的用戶輸入值可以用該方程顯示y的值。沒有創建y = ...

如果用戶爲var a,x和y輸入值,程序可以用該等式顯示z的值。如果沒有創建Z = ...

+0

使用'if'或'switch'語句? – user1666620

+1

這個公式是否會改變(硬編碼或動態)?用戶是否提交了一個等式?如果是這樣,是否需要執行方程的錯誤檢查(準確的括號,指數等)。) – Jon

+0

@Jon:我編輯了新的解釋,方程是從程序,用戶不能改變,用戶只是提交變量的值 –

回答

-2

回答第一個問題:

Y = X - Z 

是唯一可能的解決方案。沒有其他的方法來計算Y. 這是因爲計算機不能求解方程式(或更好的方法,它們可以被編程來解決它們,但只使用'Y = X-Z'),它們可以改變變量。在這種情況下,我們將Y值設置爲(X-Z)值。

回答了第二個問題:

你能解決這個等式做

X = fourth square of (...) 

,或者您可以使用自己做這一切工作的庫,例如「計算機代數系統」(由@又引FrankPuffer)

當然:你可以求解反函數的方程,如'Y = X-Z',或者使用簡化寫代碼的庫。

+0

感謝您的回覆,我用新示例編輯了我的問題 –

+0

這不是問題的答案,如果您在發表評論時不明白問題,並且您沒有發佈必要的代表評論,等待別人發表澄清的評論 –

+0

@KevinWells對不起......但這是第一個問題的回答......他稍後編輯它...... – EnricoBilla

-1

這不是它的工作原理。在編程語言中,你並沒有方程式,而是分配。您可以爲左側的變量分配右側的值。

因此獲得Y中的唯一途徑,有X和Z時是通過運行

y = x - z 

編輯:您可能希望創建類似

myFunction(double? x=null, double? y=null, double? z=null, double? a=null) 

然後裏面你檢查哪些變量爲空(所以不用),並相應地執行你的計算。你可以運行它像這樣

var something = myFunction(x: 1, y: 2, a: 3) 
0

你必須相對於未知變量來解決方程:

x = y + z; 

相當於

y = x - z; 

z = x - y; 

對於第二個方程式比較困難。如果一個< 0將不會有解決方案。否則,您可以先取第4個根:

a = (((x + y - z)/2)*10)^4 <=> sqrt(sqrt(a)) = +/- (x + y + z) * 5 

然後針對x,y或z對其進行解析。請注意,您一般會得到兩個解決方案。

有些程序和庫可以自動完成這些計算:檢查「符號數學」或「計算機代數系統」。

-1

如果你不想寫新的代碼行,並獲得「Y」時,「X」是一樣的方程式中diferent爲零,試試這個結果......

// equation : x = y + z 
var x=3,y=0,z=2; 
x = ((x!=0) ? (x-z) : y) + z; 
console.log("Result : "+ x); 

// or saving the value in 'y' 
x = ((x!=0) ? y = (x-z) : y) + z; 
console.log("Result 2 : "+ x); 
0

我感覺到你提出這個問題的數學的深入研究,可以檢索算法對谷歌有關equation algorithm solve,若您有一些基本算法的簡單工作流維基百科

是的鏈接,找到一個變量

讓利我們假設這個環境; 因爲總是會有三個變量,所以您可以確定只有三個變量爲空,然後選擇要查找的變量的等式(如果非爲空),那麼您發送的消息中沒有值爲空

原來的公式是X = Y + ZA

x=5; y=7; z=2; a=null; 

If (!x.hasValue()){ 
x= y + z - a; 
} 
.... 
Else if (!a.hasValue()){ 
a = -(x + y + a); 
}Else{Console.Write("Don't give value to all variable");} 
1

你要找的是一個 '求解器'。這不是微不足道的,有很多關於這方面的研究,一些着名的大型數學軟件可以做到這一點。

欲瞭解更多詳情,請谷歌'計算機代數算法'。

+0

好吧,你抓住我的問題。那麼,我必須爲每個想要獲得該值的變量手動創建方程式?謝謝 –

+0

這似乎是最簡單的方法。方程求解器並不重要,爲了您的目的,您可能需要的僅僅是一組多個方程。有些方程甚至可能不可解,有許多這樣的複雜因素可能對您的需求無關緊要。 – user1952500