2012-01-29 23 views
6

Sau khi cố gắng giải quyết vấn đề toán học biểu tượng, tôi có biểu thức với khoảng 17.000 ký tự. Tôi đang sử dụng hộp công cụ biểu tượng cho Matlab, nhưng tôi mở cho bất kỳ gợi ý (Mathematica, bất cứ điều gì).Đơn giản hóa một biểu thức rất dài bằng cách tự động giới thiệu các biến thời gian hoặc theo bất kỳ cách nào khác

Vì lý do hiển nhiên, tôi sẽ không sao chép và dán biểu thức thẳng vào câu hỏi. Here is a link instead.

Chạy các lệnh Matlabsimplifysimple và thậm chí cố gắng để collect không cải thiện tình huống (Một số trở nên tồi tệ hơn).

Nhưng tôi tự hỏi, tôi không quan tâm nếu biểu thức được đánh giá theo các bước, với tham số thời gian. Một cái gì đó như:

z1 = a^2*y1; 
%Now the expression can be simplified by using z1 as alias! 
z1+z1^2 .... 

Có phương pháp tự động nào để có được sự đơn giản hóa từng bước như vậy với các biến thời gian không? Ngoài ra, bất kỳ phương pháp nào khác mà bạn có thể nghĩ là đáng tin cậy.

+1

@Mr. Wizard Đồng ý. Tôi gần như đã mua cho bạn một, cho đến khi tôi nhìn vào thẻ giá (họ thổi phồng tất cả mọi thứ ...) –

+0

@ Daniel Tôi đã không quyết định nếu tôi nên cảm ơn bạn hoặc báo chí phí. O_o –

+0

Tôi không thể so sánh trực tiếp với Matlab (Tôi không có chương trình này), nhưng có vẻ như Đơn giản hóa và FullSimplify của Mathematica hiệu quả hơn các lệnh tương tự trong Matlab. Sau khi đơn giản hóa biểu thức của bạn có 2192 và sau khi FullSimplify nó có chỉ 1535 ký tự. Có lẽ điều này là đơn giản hóa đủ cho bạn hoặc nó sẽ là một điểm khởi đầu mới tốt cho những nỗ lực đơn giản hơn nữa. – partial81

Trả lời

5

Có thể thử loại bỏ biểu hiện chung (CSE). Dưới đây là một ví dụ cribbed từ

Get mathematica to simplify expression with another equation

InputForm[Experimental`OptimizeExpression[(3 + 3*a^2 + Sqrt[5 + 6*a + 5*a^2] + 
     a*(4 + Sqrt[5 + 6*a + 5*a^2]))/6]] 

==>

Out[206]//InputForm= 
Experimental`OptimizedExpression[Block[{Compile`$1, Compile`$3, Compile`$4, 
    Compile`$5, Compile`$6}, Compile`$1 = a^2; Compile`$3 = 6*a; 
    Compile`$4 = 5*Compile`$1; Compile`$5 = 5 + Compile`$3 + Compile`$4; 
    Compile`$6 = Sqrt[Compile`$5]; (3 + 3*Compile`$1 + Compile`$6 + 
    a*(4 + Compile`$6))/6]] 
1

Như tôi đã viết trong nhận xét của tôi, có vẻ như các công cụ đơn giản hóa của Mathematica có hiệu quả hơn các lệnh tương tự trong Matlab. Vì có vẻ như bạn là người dùng Matlab, tôi cung cấp cho bạn hướng dẫn chi tiết cách sử dụng chỉ hai lệnh đơn giản hóa của Mathematica. sản xuất Nếu bạn xác định biểu dài của bạn như

longExpression = (x3^2*(y2+y3-a*y1-a*y2-2*a*y3-... 

Sau đó, bạn có thể sử dụng

Simplify[longExpression] 
and 
FullSimplify[longExpression] 

cuối cùng một biểu hiện tốt đẹp và rõ ràng mà chỉ có 1535 ký tự (âm thanh nhiều, nhưng không có quá nhiều biến). Có lẽ điều này là đủ đơn giản cho vấn đề của bạn. Nếu không, hãy cho chúng tôi biết.

Các vấn đề liên quan