-
حل تابع چند جمله ای
با سلام به دوستان گرامی،
من یه تابع درجه دوم دارم که باید ازش مشتق بگیرم و بعد برابر یک ضریبی قرار بدم و سپس ریشه ی اون تابع مشتق گرفته شده (درجه یک) رو بدست بیارم.
من مشتق میگیرم و برابر اون ضریب قرار میدم ولی نمیتونم ریشه رو بدست بیارم.
کسی هست کمک کنه؟
منظورم اینه که دستور این معادله رو چطوری بنویسم؟ (x متغیره)
2ax+b=c
باید از این معادله x بدست بیاد.
مرسی
-
نقل قول: حل تابع چند جمله ای
سلام
اگه می خواهید به صورت سمبولیک حل کنید می تونید از تولباکس symbolic استفاده کنید
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
سلام
اگه می خواهید به صورت سمبولیک حل کنید می تونید از تولباکس symbolic استفاده کنید
نه. فعلن میخوام کد بزنم!
دستوری نداره؟
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
coronaa
نه. فعلن میخوام کد بزنم!
دستوری نداره؟
ببینید این لینک به کارتون میاد:
http://www2.math.umd.edu/~immortal/2...quations.shtml
حالا اگه می خواهید چرخ را دوباره اختراع کنید باید کاری شبیه کاری که مثلا یک کامپایلر انجام میده انجام بدین
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
ممنونم. دقیقاً همینو میخواستم!
-
نقل قول: حل تابع چند جمله ای
مهندس مشکلم تقریباً حل شد. حالا میخوام نتیجه رو چاپ کنم یه پیغام خطا میده!
clc; clear;
syms P
for i=1:5
a(i)=5;
b(i)=10;
c(i)=15;
ro(i)=30;
lambda=20;
% -----------------------------
f=a*P^2+b*P+c;
d=diff(f,'P');
% -----------------------------
s=d(1,i)-lambda;
p(1,i)=solve(s) ; % P(i) bozorg
Pr=sum(p);
% -----------------------------
end
fprintf('Pi(Big) = %f',p);
fprintf('Pr = %f',Pr);
این خطا رو میده. ظاهراً P که بعنوان سیمبول شناخته شد دیگه دستور fprintf کار نمیکنه :
??? Error using ==> fprintf
Function is not defined for 'sym' inputs.
Error in ==> ProftCode at
fprintf('Pi(Big) = %f',p);
-
نقل قول: حل تابع چند جمله ای
من تولباک سمبولیک ندارم حالا شما اگه بتونید اول p را تبدیل به عدد اعشاری بکنید چون f% که در fprintf استفاده میشه برای چاپ عدد اعشاری هست. مثلا با استفاده از دستور double یا امثال اینها
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
من تولباک سمبولیک ندارم حالا شما اگه بتونید اول p را تبدیل به عدد اعشاری بکنید چون f% که در fprintf استفاده میشه برای چاپ عدد اعشاری هست. مثلا با استفاده از دستور double یا امثال اینها
p هم عدد اعشاریه هم یک ماتریس یک در 5 هست. نکنه بخاطر ماتریس بودنش قبول نمیکنه؟
-
نقل قول: حل تابع چند جمله ای
ممنونم دوست عزیز.
حل شد تا اینجا. :لبخندساده:
-
نقل قول: حل تابع چند جمله ای
اگه یه مجموعه داشته باشیم بصورت {1,2,3} و بخوایم حالت های ممکنی که می تونن با هم یه زیر مجموعه تشکیل بدن چطوریه؟
مثلاً به این صورت :
{1},{1,2},{1,3},{2,3},{1,2,3}
ضمن اینکه {1,2} و {2,1} فرقی نمیکنن با هم!
-
نقل قول: حل تابع چند جمله ای
a=[1 2 3];
for i=1:numel(a)
s{i}=nchoosek(a,i);
end
disp(s)
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
a=[1 2 3];
for i=1:numel(a)
s{i}=nchoosek(a,i);
end
disp(s)
nchoosek، جایگشته؟
ولی من تمام حالتهای زیر مجموعه رو میخوام. تعدادشون نه! خود حالت ها رو نشون بده.
خروجی متلب :
[3x1 double] [3x2 double] [1x3 double]
-
نقل قول: حل تابع چند جمله ای
s سک سلوله که داخلش تمام حالتها قرار داره.
خروجی octave:
octave-3.6.2.exe:3> disp(s)
{
[1,1] =
1
2
3
[1,2] =
1 2
1 3
2 3
[1,3] =
1 2 3
}
-
نقل قول: حل تابع چند جمله ای
دستتون درد نکنه ولی من هنوز اون جوابی که میخواستم رو نگرفتم.
یکمی باز مقالاتم رو مطالعه میکنم تا برام روشنتر بشه که چی میخوام. بعد دوباره سوالم رو از شما میپرسم.
ممنونم از راهنمائیت.
مرسی
-
نقل قول: حل تابع چند جمله ای
آقای مهندس،
برنامه ای که دادی رو یکمی دستکاری کردم و به یه جوابی رسیدم. بصورت زیر :
;
a=[1 2 3];
for i=1:numel(a);
v=nchoosek(a,i)
end
خروجی متلب :
v =
1
2
3
v =
1 2
1 3
2 3
v =
1 2 3
ولی میخوام خروجی رو به این صورت نمایش بده :
http://www.uplooder.net/img/image/1/...89cc88/aaa.jpg
راه حلی وجود داره به نظر شما؟
-
نقل قول: حل تابع چند جمله ای
نقل قول:
راه حلی وجود داره به نظر شما؟
این را امتحان کنید
a=[1 2 3];
k=1;
for i=1:numel(a)
s=nchoosek(a,i);
for j=1:size(s,1)
v(k)=sum(x(s(j,:)).*y(s(j,:)));
k=k+1;
end
end
disp(v)
-
نقل قول: حل تابع چند جمله ای
خطا :
??? Undefined function or method 'x' for input arguments of type
'double'.
Error in ==> sett1 at 6
v(k)=sum(x(s(j,:)).*y(s(j,:)));
-
نقل قول: حل تابع چند جمله ای
توی فایل ورد که x و y داشتین. من فکر کردم x و y عبارتند از دو تا بردار مثلا با طول 3 (چون a هم از 1 تا 3 بود)یه چیزی شبیه این
x=rand(1,3);
y=rand(1,3);
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
توی فایل ورد که x و y داشتین. من فکر کردم x و y عبارتند از دو تا بردار مثلا با طول 3 (چون a هم از 1 تا 3 بود)یه چیزی شبیه این
x=rand(1,3);
y=rand(1,3);
بله. میشه گفت برداره.
در اصل توی رابطه ام x,y وجود نداره. رابطه های دیگه هست ولی گفتم پیچیده نشه فقط بعنوان مثال یه جمله ی اون رو گذاشتم.
خب حالا جوابی که گرفتم بصورت زیره :
Columns 1 through 6
0.7441 0.5728 0.0124 1.3169 0.7565 0.5852
Column 7
1.3293
-
نقل قول: حل تابع چند جمله ای
حالا v برای حالتهای مختلف به دست اومده
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
حالا v برای حالتهای مختلف به دست اومده
چطوری باید بفهمم کدوم v هست؟
-
نقل قول: حل تابع چند جمله ای
به همون ترتیبی که s را چاپ می کردیم
-
نقل قول: حل تابع چند جمله ای
-
نقل قول: حل تابع چند جمله ای
{i} یعنی یکی از اعضای s که در اینجا یکی از اعداد 1 و 2 یا 3 میتونه باشه
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
{i} یعنی یکی از اعضای s که در اینجا یکی از اعداد 1 و 2 یا 3 میتونه باشه
به. یعنی باید عضو i از اونا کم بشه.
اگه i برابر 1 هست میشه :
v(1,2)-v(2)
v(1,2,3)-v(2,3)
-
نقل قول: حل تابع چند جمله ای
فکر می کنم این فی باید جزء یک فرمول بزرگتر باشه درسته؟
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
فکر می کنم این فی باید جزء یک فرمول بزرگتر باشه درسته؟
نه.
مستقله. فقط همون Vs هایی که بدست آوردیم باید درش قرار بدیم تا فی i بدست بیاد.
-
نقل قول: حل تابع چند جمله ای
آخه یه مشکل وجود داره. توی فرمول v که در فایل ورد اولی بود اون اندکس i منظورش چیه؟ منظورش اعضای مجموعه s هست یا نه صرفا اندیس هست؟
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
آخه یه مشکل وجود داره. توی فرمول v که در فایل ورد اولی بود اون اندکس i منظورش چیه؟ منظورش اعضای مجموعه s هست یا نه صرفا اندیس هست؟
تعداد اعضای مجموعه A هست. یعنی 3 تا
حل مسئله بدین صورته :
-
نقل قول: حل تابع چند جمله ای
این یکی
a=[1 2 3];
x=rand(1,3);
y=rand(1,3);
function ret= indexV(Smini,S,v)
ret=0;
if (numel(Smini)==0)
return;
end
for i=1:numel(S)
if(size(S{i},2)<numel(Smini))
ret=ret+size(S{i},1);
else
[val,dx]=ismember(Smini, S{i},'rows');
ret=ret+dx;
break;
end
end
ret=v(ret);
end
k=1;
S={};
v=[];
for i=1:numel(a)
s=nchoosek(a,i);
S{i}=s;
for j=1:size(s,1)
v(k)=sum(x(s(j,:)).*y(s(j,:)));
k=k+1;
end
end
k=1;
phi=zeros(1,numel(a));
for i=1:numel(S)
for j=size(S{i},1)
for z=1:numel(a)
if (ismember(a(z),S{i}(j,:)))
phi(z)=phi(z)+factorial(numel(S{i}(j,:))-1)* factorial(numel(a) -numel(S{i} (j,:)))* (v(k)-indexV(setdiff( S{i}(j,:) ,a(z)),S,v))/ factorial(numel(a));
k=k+1;
end
end
end
end
disp(phi)
-
نقل قول: حل تابع چند جمله ای
دستت درد نکنه. این خطا رو میده فعلاً :
??? Undefined function or variable 's'.
Error in ==> rphii at 9
S{i}=s;
-
نقل قول: حل تابع چند جمله ای
آقا فعلاً خطا نداد. دارم بررسی میکنم ببینم جواب درست میده یا نه!
مرسی مهندس :تشویق::تشویق:
-
نقل قول: حل تابع چند جمله ای
مهندس، من رابطه های خودمو توی برنامه جایگذاری کردم.
لینکی که براتون فرستادم ، رابطه ی دوم باید توی متلب نوشته بشه. من بصورت زیر نوشتم. چند تا جمله ی دیگه هم هست. این جمله رو گیر میده میگه ماتریس باید مربعی باشه. یعنی سایز این ماتریس با ماتریسهای دیگه که با هم جمع و کم میشن یکی نیست.
مشکلش کجاست ؟
http://www.uplooder.net/img/image/47...a6999/zzzz.jpg
v(k)=sum(a(s(j,:)).*(pi(s(j,:)))^2+b(s(j,:)).*pi(s (j,:))+c(s(j,:)));
طرز نوشتنش درسته؟(این a با a که قبلن تعریف کردیم فرق میکنه.
a,b,c,pi هر کدام، یک بردار یک در سه هستن.
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
coronaa
مهندس، من رابطه های خودمو توی برنامه جایگذاری کردم.
لینکی که براتون فرستادم ، رابطه ی دوم باید توی متلب نوشته بشه. من بصورت زیر نوشتم. چند تا جمله ی دیگه هم هست. این جمله رو گیر میده میگه ماتریس باید مربعی باشه. یعنی سایز این ماتریس با ماتریسهای دیگه که با هم جمع و کم میشن یکی نیست.
مشکلش کجاست ؟
http://www.uplooder.net/img/image/47...a6999/zzzz.jpg
v(k)=sum(a(s(j,:)).*(pi(s(j,:)))^2+b(s(j,:)).*pi(s (j,:))+c(s(j,:)));
طرز نوشتنش درسته؟(این a با a که قبلن تعریف کردیم فرق میکنه.
a,b,c,pi هر کدام، یک بردار یک در سه هستن.
آقا حل شد. ظاهرن!
بردار pi که به توان 2 بود رو ضرب نقطه ای کردم. درسته؟
v(k)=sum(a(s(j,:)).*(pi(s(j,:)).*pi(s(j,:)))+b(s(j ,:)).*pi(s(j,:))+c(s(j,:)));
حالا فعلن مشکلش اینه که v و فی رو منفی میده (البته با داده های خودم!)
دارم بررسیش میکنم.
تا اینجا خیلی چیزها رو از شما یاد گرفتم. واقعن سپاسگزارم.
مرسی
-
نقل قول: حل تابع چند جمله ای
ببخشید اون قسمت آخر کد یه اشتباه کوچولو شده لطفا تغییر بدید
k=1;
phi=zeros(1,numel(a));
for i=1:numel(S)
for j=size(S{i},1)
for z=1:numel(a)
if (ismember(a(z),S{i}(j,:)))
phi(z)=phi(z)+factorial(numel(S{i}(j,:))-1)* factorial(numel(a) -numel(S{i} (j,:)))* (v(k)-indexV(setdiff( S{i}(j,:) ,a(z)),S,v))/ factorial(numel(a));
end
end
k=k+1;
end
end
disp(phi)
-
نقل قول: حل تابع چند جمله ای
مهندس میشه به طور مختصر از تابعی که تعریف کردی رو توضیح بدی؟ احتمالن واسه محاسبه ی s-{i}
هست!
همچنین خط 38 برنامه.
ممنونم
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
coronaa
مهندس میشه به طور مختصر از تابعی که تعریف کردی رو توضیح بدی؟ احتمالن واسه محاسبه ی
s-{i}
هست!
همچنین خط 38 برنامه.
ممنونم
بله تابع واسه s-{i هست. ا.ن سلول خودش شامل 3 تا زیر مجموعه هست ما تعداد اعضای این زیر مجموعه ها را می شماریم تا برسیم به عنصر مورد نظر و شماره اندکس اون را در میاریم تا بتونیم v با اون اندکس را پیدا کنیم
توی اون حلقه های تودرتوی آخر هم تقریبا همین روند را دنبال می کنیم با این تفاوت که الان ما v ها را داریم
-
نقل قول: حل تابع چند جمله ای
یه اشتباه دیگه کشف کردم فکر کنم دیگه مشکلی نباشه:)
k=1;
phi=zeros(1,numel(a));
for i=1:numel(S)
for j=1:size(S{i},1)
for z=1:numel(a)
if (ismember(a(z),S{i}(j,:)))
phi(z)=phi(z)+factorial(numel(S{i}(j,:))-1)* factorial(numel(a) -numel(S{i} (j,:)))* (v(k)-indexV(setdiff( S{i}(j,:) ,a(z)),S,v))/ factorial(numel(a));
end
end
k=k+1;
end
end
disp(phi)
-
نقل قول: حل تابع چند جمله ای
چرا فی منفی در میاد؟
همه ی v ها که مثبت هستن!
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
coronaa
چرا فی منفی در میاد؟
همه ی v ها که مثبت هستن!
این اصلاح آخری که کردم دیگه با این داده ها منفی نمیشه