کلیدستان

نسخه‌ی کامل: برنامه نویسی در زمینه ریاضیات سرمایه گذاری (در متلب)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
من یک برنامه میخوام بنویسم که دو قسمت داره.
یک رابطه به این شکل وچود داره:
L*((((1+i)^n)-1)/i)-R*((((1+i)^n)-1)/i)-x=0
قسمت الف با داشتن L,R,i,n باید x رو بدست بیاریم.
در قسمت ب این مقادیر و همین طور x که بدست اومده این معادله رو حل میکنه:
R*((1+i)^n-1)+x=L*(1+j)^n
یعنی j رو حساب کنیم.
قسمت اول رو با نوشتن معادله بر حسب x و بعد مقدار دهی با دستور subs نوشتم
اما قسمت دوم برحسب j که مینویسم ارور میاد که n و x باید حقیقی باشه
و همین طور با solve که نوشتم مقدار میدم اجرا نمیشه!
یعنی من اشتباه میکنم در مقدار دهی. چطور میتونم به متغیر ها مقدار بدم و با solve حلش کنم.
و کلاً جور دیگه ای میشه این برنامه رو نوشت؟ و این x رو چطور باید جایگزین کرد در معادله بعد؟
مرسی از راهنماییتون!
سلام.
کدهاتون رو در اینجا بنویسید تا بررسی کنم (کامل باشد تا بتوانم آن را اجرا کرده و خطا را ببینم).


 
 
کد پی‌اچ‌پی:
syms L R n i x j
x
=(L*((1+i)^n))-R*((((1+i)^n)-1)/i);
subs(x,[L,R,i,n],[1000,100,.05,14])
 
j=nthroot(ans+((R*((((1+i)^n)-1)/i))/L),n)-

از بین کدهایی که نوشتم این بهتر بود! برای همین این رو نوشتم اینجا!
 
شما هنگام استفاده از دستور nthroot ، باید دو عدد حقیقی را به کار ببرید، ولی شما مواردی را به دستور می دهید که دارای نمادهای سمبلیک (مثلا R) می باشند. حتی اگر متغیر برابر یک عدد هم باشد ولی نوع آن از نوع سمبلیک باشد، باز هم دستور مورد نظر خطا می دهد. برای همین، بنده ابتدا مقادیر سمبل ها را جایگرین می کنم و سپس نوع آن را هم با دستور double ، به double تبدیل می کنم :

کد پی‌اچ‌پی:
clear all
close all
clc

syms L R n i x j
x
=(L*((1+i)^n))-R*((((1+i)^n)-1)/i);
x=subs(x,[L,R,i,n],[1000,100,.05,14])
y=x+((R*((((1+i)^n)-1)/i))/L)
y=subs(y,[L,R,i,n],[1000,100,.05,14])
y=double(y)
n=14
j
=nthroot(y,n)-

نتیجه اجرای کد متلب بالا :

کد پی‌اچ‌پی:
=
 
32880067478491319/1638400000000000
 
 
=
 
(
R*((1)^1))/(L*i) + 32880067478491319/1638400000000000
 
 
=
 
18045553671767168181/819200000000000000
 

=

   
22.0283


=

    
14


=

    
0.2472 

خیلی خیلی ممنونم