سئوالات و مشکلات در متلب (MATLAB)

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام به همه دوستان
یه کد متلبی دارم که تصویر اثرانگشت رو میگیره و روش عملیاتی رو انجام میده
میخوام همه اون مراحل رو برای چند تا عکس انجام بدم و نتیجشون رو هم جدا جدا ذخیره کنم
کسی میتونه کمکم کنه آیا؟!

شما باید همه این مراحل رو بزارید داخل یه حلقه for یا while؛
  • اگه تعداد عکسها از آغاز مشخصه، حلقه for ساده تره.
  • می تونید برای کل این کارها یه تابع بنویسید و در یه حلقه اون تابع رو فراخوانی کنید.
در انتهای این عملیاتی که تکرار می شه می تونید داده ها رو ذخیره کنید.
  • برای ذخیره و بازیابی اطلاعات می تونید از دستور save و load استفاده کنید (یا دستورهای دیگه ای که نیازتونه).
  • اگه از حلقه while استفاده می کنید یه شمارنده تعریف کنید.
  • از ترکیب دستورهای زیر برای منظوری که گفتید استفاده کنید:
eval, num2str​
 

yas87

کاربر حرفه ای
کاربر ممتاز
دوستان احتمالا من نيز به کمک تون احتياج داشته باشم
من الگوريتم مورچه رو بلدم
فقط ميخوام اينو بهبود بدم
الگوريتم نوشته شده
در اين روش
در اين روش صفحه را به
n ناحيه ي مربعي شكل مساوي تقسيم مي كنيم و به هر مورچه يك اتوماتاي يادگير اختصاص مي دهيم. اين اتوماتاهاي يادگير داراي n^2 عمل مي باشند
ميخوام بگم براي اجراي اين روش از حلقه forبايد استفاده کنم ؟
و n ناحيه مربعي رو چطور بدست بيارم
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چطوری حل شد می شه مختصر توضیح بدید؟

در این نمونه ای که گذاشته بودید، n رو نهایتاً چی در نظر گرفتید؛ مقدارش؟ واحدش؟


سلام دوستان ...

ببخشید یه اشتباه کوچیک کردم ... n واحد نداره و بدون بعده ولی واحد K فرق میکنه واحدش هست : ( Kf ( (mg/g) ( l /mg)^1/n

در باره مقدار n هم همون مقدار قبلی درست بودن...

کد:
[LEFT]ps=1.1;
Kf=0.991e3;
n=0.782;
e=0.25;
dh=3635.95;
uz=1283.35;[/LEFT]
 

ramtin2021

عضو جدید
سلام به همه دوستان. من یه مشکلی دارم در اجرای متلب نسخه 8 که به تازگی نصب کردم. برا خودم واقعا عجیبه:
چند تا m فایل در یک پوشه گذاشتم که حاوی کد هست. حال زمانیکه میخوام بعد از بالا آمدن متلب، یکی از اونها (که main برنامه است) را open کنم، یهو ارور میده (close the program) و بسته میشه متلب.
باید چکار کنم؟ انگار نمیتونه قایلها را بخونه و در current folder در صفحه اصلی متلب بیاره.
یه راه پیدا کردم که همه اون فایلها را ابتدا به کپی-پیست در متلب بیارم. بعد در mfile اون کد اصلی را تایپ و اجرا کنم تا بتونه اجرا کنه. خواهشا کمکم کنید
 

.:Shila:.

عضو جدید
کاربر ممتاز
شما باید همه این مراحل رو بزارید داخل یه حلقه for یا while؛
  • اگه تعداد عکسها از آغاز مشخصه، حلقه for ساده تره.
  • می تونید برای کل این کارها یه تابع بنویسید و در یه حلقه اون تابع رو فراخوانی کنید.
در انتهای این عملیاتی که تکرار می شه می تونید داده ها رو ذخیره کنید.
  • برای ذخیره و بازیابی اطلاعات می تونید از دستور save و load استفاده کنید (یا دستورهای دیگه ای که نیازتونه).
  • اگه از حلقه while استفاده می کنید یه شمارنده تعریف کنید.
  • از ترکیب دستورهای زیر برای منظوری که گفتید استفاده کنید:
eval, num2str​

ممنون از راهنماییتون
میشه عکسها رو از یه فایل خوند؟ یعنی دونه دونه از کاربر نگیره خودش بره اون فایل رو بخونه
(توی اون فایل هم میخوام اولش عکسهای کمی بذارم که سرعت پردازش زیاد باشه ولی بعد که جواب گرفتم تعدادشو ببرم بالا)
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
ممنون از راهنماییتون
میشه عکسها رو از یه فایل خوند؟ یعنی دونه دونه از کاربر نگیره خودش بره اون فایل رو بخونه
(توی اون فایل هم میخوام اولش عکسهای کمی بذارم که سرعت پردازش زیاد باشه ولی بعد که جواب گرفتم تعدادشو ببرم بالا)

منظورتون از یه پوشه (یا فولدر) باید باشه. بله می شه؛ باز هم باید در همون حلقه for یا while و با دادن مسیر پوشه این کار رو انجام بدید. حداقل به یکی از سه حالت زیر:
اسم همه عکسها یه جوره و فقط در یه شماره فرق می کنن؛ از دستورهای eval و num2str استفاده کنید.
اسم عکسها یه جور نیست، اما لیستش رو در یک ماتریس یا آرایه دارید؛ از دستورهای eval و num2str استفاده کنید.
اسم عکسها رو نمی دونید، و نمی خواهید هم بدونید؛ اول با استفاده از دستور dir لیست عکسها رو پیدا کنید و در یک آرایه بریزید، بعد از حالت قبلی استفاده کنید.
 

designchem

متخصص طراحی دستگاههای تبادل حرارت
کاربر ممتاز
سلام. دارم یه برنامه با متلب مینویسم که روش سعی و خطاست . و باید دو مقدار رو با هم مقایسه بکنه اگه اختلافشون کمتر از میزان مورد نظر بود که از حلقه خارج بشه و در غیر این صورت باید این مقدار رو برابر مقدار جدید قرار بده و به یک خط مشخص از برنامه که بالاتر قرار داره برگرده تو فرترن یادمه از go to استفده میکردیم .چطوری تو متلب باید بهش بگم که به فلان خط برنامه برو؟
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
سلام. دارم یه برنامه با متلب مینویسم که روش سعی و خطاست . و باید دو مقدار رو با هم مقایسه بکنه اگه اختلافشون کمتر از میزان مورد نظر بود که از حلقه خارج بشه و در غیر این صورت باید این مقدار رو برابر مقدار جدید قرار بده و به یک خط مشخص از برنامه که بالاتر قرار داره برگرده تو فرترن یادمه از go to استفده میکردیم .چطوری تو متلب باید بهش بگم که به فلان خط برنامه برو؟

سلام دوست من ...

باید بگم که اصلا خوب نیست که تو برنامه از دستوراتی مثل goto استفاده بشه و معمولا باید برنامه رو طوری نوشت که نیازی به این دستورات نباشه ... فکر کنم goto تو متلب ارور بده شما می تونی از فرمانهایی مثل for و یا while استفاده کنی ...

البته به نظر من بهتره اون قسمت از برنامه رو که باید دوباره اجرا بشه رو بصورت یه فانکشن تعریف کن و به جای دستور goto در صورت نیاز به اجرا شدن فقط کافیه که تابع رو فراخوانی کنی ...
 

parsa666

عضو جدید
سلام
آقا من دو تا سوال در مورد نمودارهای سه بعدی دارم

اول اینکه میشه توی یک نمودار سه بعدی قسمتی رو های لایت کرد، یعنی یه قسمت بین کل نمودار با کادر یا یه رنگ دیگه مشخص بشه؟

دوم اینکه میشه دیتا کرسر رو به صورت اتوماتیک و برنامه نویسی یه جای نمودار قرار بدم. مثلا در یه x , y مشخص تا مقدار z رو در اون نقطه رو نمودار نشون بده
 

.:Shila:.

عضو جدید
کاربر ممتاز
سلام
یه کد متلب دارم که توش از دستور substring استفاده شده
ولی متلب اون رو نمیشناسه
فکر کنم چون کد مال چند سال پیش هست دستور عوض شده باشه
شما میدونین چه دستوری رو میتونم جایگزینش کنم؟!

file_a = substring(char(file_a), 0, strfind(char(file_a), '_')-2);


substring رو با strrep جایگزین کردم (به نظرتون کار درستی کردم؟)
اما حالا برای ورودی ارور میده
به نظرتون char رو باید با دستور دیگه ای جایگزین کنم یا اشکال از دستور strrep هست؟!
file_a = strrep(char(file_a), 0, strfind(char(file_a), '_')-2);


و اروری که میده اینه:
Warning: Inputs must be character arrays or cell arrays of strings.
 

hamid kor

عضو
با سلام

درخواست راهنمایی از دوستان داشتم که نمیدونم که تو این تاپیک باید مطرح بشه یا نه! بهرحال اگر جای مناسبی مطرح نکرده امٰ غذر خواهی بنده رو قبول بفرمائید.

واقعیتش میخواستم یه سری از داده ها رو مشروط به یه سری داده ی دیگه تفکیک کنم که قبلا واسه مورد مشابه ولی دقیقتر اینکار رو تو اکسل میتونستم انجام بدم ولی این مورد بحثش تاحدودی فرق میکنه:
فرض کنید که یه مکعب بزرگ داریم که خودش به چندین بلوک (مکعب کوچک) تقسیم شده (بصورت کاملا منظم و با مختصات مشخص واسه هر بلوک)، حالا میخواهیم این مکعب بزرگ رو بوسیله ی یک رویه ی غیر مسطح (که مختصات قسمت های مختلف رو بصورت نامنظم اما به تعداد زیاد در اختیار داریم) قطع کنیم و بلوک های بالای این رویه را از بلوک های زیر آن جدا کنیم. این رویه داده های منظم داشت میشد خیلی ساده تفکیک رو انجام داد ولی حالا که مختصات نقاط مختلف رویه نظم مشخصی ندارن به نظر شما تو متلب میشه واسش کدی نوشت؟ اگر امکانش هستٰ ممنون خواهم شد که راهنمایی بفرمائید.

قبلا از کمک شما کمال تشکر را دارم
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
یه کد متلب دارم که توش از دستور substring استفاده شده
ولی متلب اون رو نمیشناسه
فکر کنم چون کد مال چند سال پیش هست دستور عوض شده باشه
شما میدونین چه دستوری رو میتونم جایگزینش کنم؟!

file_a = substring(char(file_a), 0, strfind(char(file_a), '_')-2);



substring رو با strrep جایگزین کردم (به نظرتون کار درستی کردم؟)
اما حالا برای ورودی ارور میده
به نظرتون char رو باید با دستور دیگه ای جایگزین کنم یا اشکال از دستور strrep هست؟!
file_a = strrep(char(file_a), 0, strfind(char(file_a), '_')-2);


و اروری که میده اینه:
Warning: Inputs must be character arrays or cell arrays of strings.
کد:
function str=substring(str,first,varargin)




% SUBSTRING Return part of a Java string.


% Copyright 1992-2004 The MathWorks, Inc.
% $Revision: 1.4.4.1 $  $Date: 2004/08/17 21:42:23 $




if isempty(varargin)
  str=str(first+1:end);
else
  str=str(first+1:varargin{1}+1);
end
 

.:Shila:.

عضو جدید
کاربر ممتاز
کد:
function str=substring(str,first,varargin)




% SUBSTRING Return part of a Java string.


% Copyright 1992-2004 The MathWorks, Inc.
% $Revision: 1.4.4.1 $  $Date: 2004/08/17 21:42:23 $




if isempty(varargin)
  str=str(first+1:end);
else
  str=str(first+1:varargin{1}+1);
end



ممنون ولی مشکل توی substring هست که این خطا رو میده
??? Undefined function or method 'substring' for input arguments of type 'char'.

الان به جاش regexp گذاشتم (چون توی یه منبعی نوشته بود که در ورژن جدید متلب این دستور جایگزین میشه) file_a = regexp(char(file_a), 0, strfind(char(file_a), '_')-2);
ولی بازم به دومین آرگومان ارور میده
??? Error using ==> regexp
The second argument (PATTERN) must be a one-dimensional array of char or cell arrays of strings.

موندم چیکار کنم
جای دیگه ای هم از این دستور استفاده شده یکیش درست بشه بقیش هم حل میشه
هست یاری کننده ای که یاری کند مرا
آیا؟
 

yas87

کاربر حرفه ای
کاربر ممتاز
ممنون ولی مشکل توی substring هست که این خطا رو میده
??? Undefined function or method 'substring' for input arguments of type 'char'.

الان به جاش regexp گذاشتم (چون توی یه منبعی نوشته بود که در ورژن جدید متلب این دستور جایگزین میشه) file_a = regexp(char(file_a), 0, strfind(char(file_a), '_')-2);
ولی بازم به دومین آرگومان ارور میده
??? Error using ==> regexp
The second argument (PATTERN) must be a one-dimensional array of char or cell arrays of strings.

موندم چیکار کنم
جای دیگه ای هم از این دستور استفاده شده یکیش درست بشه بقیش هم حل میشه
هست یاری کننده ای که یاری کند مرا
آیا؟
خانمی mysubstring رو امتحان کردی ؟
گمونم از این استفاده کنی درست بشه
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
ممنون ولی مشکل توی substring هست که این خطا رو میده
??? Undefined function or method 'substring' for input arguments of type 'char'.

الان به جاش regexp گذاشتم (چون توی یه منبعی نوشته بود که در ورژن جدید متلب این دستور جایگزین میشه) file_a = regexp(char(file_a), 0, strfind(char(file_a), '_')-2);
ولی بازم به دومین آرگومان ارور میده
??? Error using ==> regexp
The second argument (PATTERN) must be a one-dimensional array of char or cell arrays of strings.

موندم چیکار کنم
جای دیگه ای هم از این دستور استفاده شده یکیش درست بشه بقیش هم حل میشه
هست یاری کننده ای که یاری کند مرا
آیا؟

ای بابا، خب اینی که گذاشتم، همون تابع قدیمی substring هست دیگه؛ توی مسیر جاری ذخیره کن و ازش استفاده کن.
 

.:Shila:.

عضو جدید
کاربر ممتاز
سلام ممنون میشم اگه به درست شدن خطای زیر کمک کنید
دستور این هست:

if p == 2
s = svd(A);

برای دستور بالا ارورهای زیر رو میده :

??? Error using ==> svd
Input to SVD must not contain NaN or Inf.

Error in ==> cond at 40
s = svd(A);

چون از cond استفاده کردم و توی توضیحات cond اینطور نوشته:

The algorithm for cond (when p = 2) uses the singular value decomposition, svd. When the input matrix is sparse, cond ignores any specified p value and calls condest.

به نظر شما چطوری میتونم خطا رو برطرف کنم؟
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام ممنون میشم اگه به درست شدن خطای زیر کمک کنید
دستور این هست:

if p == 2
s = svd(A);

برای دستور بالا ارورهای زیر رو میده :

??? Error using ==> svd
Input to SVD must not contain NaN or Inf.

Error in ==> cond at 40
s = svd(A);

چون از cond استفاده کردم و توی توضیحات cond اینطور نوشته:

The algorithm for cond (when p = 2) uses the singular value decomposition, svd. When the input matrix is sparse, cond ignores any specified p value and calls condest.

به نظر شما چطوری میتونم خطا رو برطرف کنم؟

این یعنی اینکه ماتریس A دست کم یه درایه Inf یا NaN داره. ببین برای کاری که انجام میدی همچین چیزی معنی داره یا نه؟ اگه معنی نداره، تا قبل از به دست اومدن ماتریس A یه ایرادی باید وجود داشته باشه.
 

tbivatan

عضو جدید
وارد کردن اشکال سه بعدی بافرمت های مختلف در MATLAB

وارد کردن اشکال سه بعدی بافرمت های مختلف در MATLAB

با سلام
کسی میدونه اشکال سه بعدی که توی سایر نرم افزارها مثل مایا، تری دی مکس ،کتا و. . . طراحی میشن رو چه طور میشه باحفظ مختصات X,Y,Z به محیط متلب آورد و مختصات تمام نقاط اون شکل سه بعدی رو به صورت ماتریسی دید؟
خواهش میکنم راهنمایی کنید....
تازه واردی بیش نیستم
 

yas87

کاربر حرفه ای
کاربر ممتاز
دوستان منو هم ببینید؟
من برنامه نویسی pca رو انجام دادم ... ولی ارور میده میتونید راهنمایی کنین؟دقیقا خط سوم
کد:
clear all
clc
dataset=create_dataset();
X=dataset;
covx=cov(X);
[covx1,t,y] = pcacov(covx);
newpca=covx1(:,1:50);
[a,b]=size(X);

avg=zeros(1,b);
for i=1:b
    for j=1:a
        avg(1,i)=avg(1,i)+X(j,i);
    end
    avg(1,i)=avg(1,i)/a;
end
for i=1:b
    for j=1:a
        X(j,i)=avg(1,i)-X(j,i);
    end
    
end
NEW_X=X*newpca;
 

electric99

عضو جدید
سلام

میخواستم ازتون کمک بگیرم برای حل این 2 تا تمرین

واقعا نمیدونم چه طوری پیش ببرمش:cry:

من متلب بلدم ، ولی تو سوال این موندم
 

پیوست ها

  • alizadeh.PDF
    58.3 کیلوبایت · بازدیدها: 0

peggijaan

عضو جدید
دوستان منو هم ببینید؟
من برنامه نویسی pca رو انجام دادم ... ولی ارور میده میتونید راهنمایی کنین؟دقیقا خط سوم
کد:
clear all
clc
dataset=create_dataset();
X=dataset;
covx=cov(X);
[covx1,t,y] = pcacov(covx);
newpca=covx1(:,1:50);
[a,b]=size(X);

avg=zeros(1,b);
for i=1:b
    for j=1:a
        avg(1,i)=avg(1,i)+X(j,i);
    end
    avg(1,i)=avg(1,i)/a;
end
for i=1:b
    for j=1:a
        X(j,i)=avg(1,i)-X(j,i);
    end
    
end
NEW_X=X*newpca;

ارور میده در برنامه نویسی جایی نداره. ارورش رو باید بخونید. اون داره شما رو راهنمایی می کنه که مشکل چیه. :smile:
 

peggijaan

عضو جدید
سلام

میخواستم ازتون کمک بگیرم برای حل این 2 تا تمرین

واقعا نمیدونم چه طوری پیش ببرمش:cry:

من متلب بلدم ، ولی تو سوال این موندم

برنامه هاش تو لینک زیر هست. فقط باید یه تغییراتی توشون بدید که به مسأله های شما بخورن.
http://mmnrecipes.persiangig.com/other/Mosafer.zip

توضیحشون هم تو مرجعشون (کتاب شگردهای عددی) هست.
 

electric99

عضو جدید
برنامه هاش تو لینک زیر هست. فقط باید یه تغییراتی توشون بدید که به مسأله های شما بخورن.
http://mmnrecipes.persiangig.com/other/Mosafer.zip

توضیحشون هم تو مرجعشون (کتاب شگردهای عددی) هست.

ممنون

میشه یه توضیحی هم بدید

همه این برنامه هایی که من دیدیم، مثاله کنترلیه

این کتابه هم ف ی ل ی ت ر ه
 

Similar threads

بالا