برنامهنويسی MATLAB [مطلب] برای مهندسين استفن چاپمن سعدان زكائی-آرش حجام-مهرداد مجذوبی دانشگاه صنعتی ... انتشارات: دانشگاه صنعتی خواجه نصيرالدين طوسی
1----
clc
clear
x=input('please input a number x:');
if x>=0;
sqrt_x=sqrt(x);
sqrt_x=[' sqrt_x=',num2str(sqrt_x)]
else
disp ('ERROR:x<0');
sqrt_x=0;
end
2---
حل معادله با راه برد نیوتن
راهبرد نیوتن یکی از روشهای ساده محاسبات عددی برای حل معادله چند جمله ای f(x) = 0 است. با روش تکرار برای نزدیک شدن به ریشه از راهبرد نیوتن به این شکل میتوان استفاده کرد:
x -> x - f(x)/f'(x)
یعنی در هر بار تکرار به جای x عبارت
x - f(x)/f'(x)
جایگزین میشود. مقدار دهی به x در اولین دور حلقه اختیاری است و حدس اولیه نام دارد. راهبرد نیوتن برای حدسهای اولیه مختلف ریشههای مختلف میدهد.
برای حصول ریشه های معادله درجه دو
f(x) = 3x^2 + 4.6x - 5.8
با راهبرد نیوتن برای ریشه های حقیقی با دو حدس اولیه حقیقی، و برای ریشه های موهومی با دو حدس اولیه موهومی شروع میکنیم. از تابع y2 در این برنامه استفاده میکنیم.
function [p1, p2] = y2(x,a,b,c)
p1 = a*x^2 + b*x + c;
p2 = 2*a*x + b;
% M-File script secndegree.m
% solves equation f(x) = a*x^2 + b*x -c
x = input('Enter initial guess: '); % initial guess
n = input('Enter 3 coefficients: ');
ero = 1;
iero = 1e-8; % permissible error
while ero > iero
x1 = x;
[y yp] = y2(x, n(1), n(2), n(3));
x = x - y/yp;
ero = abs((x-x1)/x);
end
format
disp(['root = ' num2str(x)])
» secndegree
» secndegree
» secndegree
» secndegree
» secndegree
جواب:
Enter initial guess: -1
Enter 3 coefficients: [3 4.6 -5.8]
root = -2.3545
Enter initial guess: 1
Enter 3 coefficients: [3 4.6 -5.8]
root = 0.82113
Enter initial guess: i
Enter 3 coefficients: [3 4.6 5.8]
root = -0.76667+1.16i
Enter initial guess: -i
Enter 3 coefficients: [3 4.6 5.8]
root = -0.76667-1.16i
3---
تابع بدون مقدار، متغیر Persistent
یک ام-فایل تابعی (که به اختصار تابع خوانده میشود) میتواند بدون مقدار برگشتی (آرگومان خروجی) باشد. اینگونه توابع معمولاٌ برای نمایش نتایج به کار میروند.
معرفی یک متغیر با پیشوند persistent باعث میشود که مقدار متغیر در مراجعات بعدی به تابع حفظ شود.
آوردن نام تابع بعد از clear اعث میشود که مقدار متغیرهای عددی persistent آن صفر شود.
مثال:
نام یک دانشجو را به عنوان ورودی دریافت و همراه با شماره ردیف نمایش میدهیم.
ابتدا یک تابع با ورودی نام دانشجو مینویسیم. این تابع نام دانشجو را از صفحه کلید دریافت میکند و هر بار که اجرا شود نام دریافتی را با شماره ردیف در کنار نام دانشجو (متغیر رشتهای wr) چاپ میکند. رشتهی wr که به تابع sst(ns) ارسال میشود یک بردار است که هر عنصر آن یک حرف الفبا است.
عبارت persistent nn باعث میشود که مقدار n که شمار ردیف را نشان میدهد برای اجرای بعدی تابع حفظ شود.
% Function M-File stt.m
function stt(ns)
persistent nn
if isempty(nn)
nn=1; دراجرای اول شماره ردیف را یک میدهیم %
else
nn = nn + 1; در هر بار تکرارِ اجرا شماره ردیف یک واحد افزایش مییابد %
end
mm = num2str(nn);
disp(['Student number ' mm ' is ' ns])
حال برنامهای به نام stdno.m مینویسیم که تابع فوق را در درون یک حلقه چند بار اجرا میکند.
% Script M-File stdno.m
clear stt
%این دستور در اجرای اولِ تابع stt() مقدار شمارنده را صفرمیکند.
wr = 'h';
%یک مقدار اولیه دلخواه برای نام دانشجو در نظر میگیریم که حلقه برای بار اول اجرا شود.
while isempty(wr) == 0
% حلقه تا زمانیکه نامی را وارد کنیم (wr خالی نباشد)، ادامه مییابد. با زدن حلقه تمام میشود.
wr = input('Enter the student name: ','s');
قرار دادی 's' به عنوان آرگومان input() باعث میشود که بتوانیم یک رشته را به wr نسبت دهیم %
if isempty(wr)
اگر بدون وارد کردن نام (wr خالی)، کلید را بزنیم برنامه تمام میشود %
break
end
stt(wr)%
end
» stdno
جواب:
Enter the student name: Ali
Student number 1 is Ali
Enter the student name: Maryam
Student number 2 is Maryam
Enter the student name: Masud
Student number 3 is Masud
Enter the student name:
4---
زیر نابع subfunction
میشود در داخل یک تابع توابع فرعی دیگری را به نام زیرتابع تعریف کرد، زیرتابعها فقط توسط تابع اصلی دیده و فراخوانده میشوند، و در خارج از تابع اصلی قابل فراخوانی نیستند. نام فایلِ نگهدارندهی ام- فایل تابعی باید نام تابع اصلی باشد.
مثال:
برای حل معادله درجه سه b^3 – 2*b^2 + 3*b -4 یک ام-فایل تابعی به نام newss() بنویسید، که در آن تابع و مشتق آن به صورت دو زیر تابع با نامهای ny() و nyp() تعریف شوند
% newss.m
function p1 = newss(a)
p1 = ny(a)/nyp(a); %
function p2 = ny(b)
p2 = b^3 - 2*b^2 + 3*b - 4 ;
function p3 = nyp(d)
p3 = 3*d^2 - 2*2*d + 3;
سپس از درون یک ام- فایل با نام eus.m، تابع newss() را فرامیخوانیم:
% eus.m
x = input('Enter initial guess: ');
ero = 1;
while ero > 1e-6
x1 = x ;
x = x- newss(x);
ero=abs((x-x1)/x);
end
disp(['root = ' num2str(x)])
» eus
» eus
» eus
جواب:
Enter initial guess: 1
root = 1.6506
Enter initial guess: i
root = 0.17469+1.5469i
Enter initial guess: -i
root = 0.17469-1.5469i
آباكوس- آموزش آباكوس- مهندسي مكانيك انجام پروژه مكانيكي+ سمينار ساخت و توليد+جامدات Matlab+ Catia + Proteus + شبيه سازي مدارات برقي با پروتئوس+ تدريس خصوصي كتيا+ سمينار ارشد + ترجمه مقاله انگليسي به فارسي انجام پروژههاي ارايه توليد فرمت مقالات كنفرانسها، پوستر، ISI، نوشتن پروپوزال رشتههاي فني، انجام پروژههاي نقشهكشي ، طراحي با كتيا محيطهاي sketch +draft-assemble+part design+static analysis+machining milling+ surface+ sheetmetal+ برنامه نويسي با متلب نمودارهاي cad cam nurbs+تدريس خصوصي و گروهي كتيا+ انجام پروزههاي تست غير مخرب- ترجمه سمينار