انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل atan2 (در متلب - MATLAB)

مشکل atan2 (در متلب - MATLAB)

#1
با عرض سلام، کدی که پیوست شده و کد پرتاب یک موشک است، در جایی از آن به من اخطار Error using atan2
Inputs must be real می دهد که علت آن را نمیدانم، خوشحال می شوم کسی از دوستان پاسخ دهد. بسیار متشکر


فایل‌های پیوست

دانلود br_si_ws.rar

نام فایل br_si_ws.rar
نوع فایل .rar
دفعات دانلود 117
اندازه 992 بایت
ارسال کننده فایل hosein2662
پاسخ

مشکل atan2 (در متلب - MATLAB)

#2
سلام.
بنده کدها را بررسی نکردم، ولی همان طور که از پیام خطا مشخص است، اخطار داده شده که باید ورودی دستور atan2 ، اعداد حقیقی (Real) باشند. 
بنابراین احتمالا ورودی دستور، یک عدد مختلط بوده که دارای بخش موهومی (Imaginary) بوده است و بنابراین دستور atan2 خطا می دهد.
در خود Help نرم افزار متلب، می توانید شکل استفاده از دستور atan2 را ببینید.
دستور imag برای به دست آوردن بخش موهومی (Imaginary) یک عدد مختلط و دستور real برای به دست آوردن بخش حقیقی (Real) یک عدد مختلط به کار می رود و می توانید از این دو دستور در متلب (MATLAB) استفاده کنید تا بخش های حقیقی (Real) و موهومی (Imaginary) اعداد مختلط را به دست آورید و سپس مطابق عملیات مورد نظر خود، از آنها استفاده نمایید (مثل دادن به ورودی دستور atan2).

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط hosein2662

مشکل atan2 (در متلب - MATLAB)

#3
(۱۳۹۷/۰۵/۱۲, ۰۶:۴۶ ب.ظ)admin نوشته: سلام.
بنده کدها را بررسی نکردم، ولی همان طور که از پیام خطا مشخص است، اخطار داده شده که باید ورودی دستور atan2 ، اعداد حقیقی (Real) باشند. 
بنابراین احتمالا ورودی دستور، یک عدد مختلط بوده که دارای بخش موهومی (Imaginary) بوده است و بنابراین دستور atan2 خطا می دهد.
در خود Help نرم افزار متلب، می توانید شکل استفاده از دستور atan2 را ببینید.
دستور imag برای به دست آوردن بخش موهومی (Imaginary) یک عدد مختلط و دستور real برای به دست آوردن بخش حقیقی (Real) یک عدد مختلط به کار می رود و می توانید از این دو دستور در متلب (MATLAB) استفاده کنید تا بخش های حقیقی (Real) و موهومی (Imaginary) اعداد مختلط را به دست آورید و سپس مطابق عملیات مورد نظر خود، از آنها استفاده نمایید (مثل دادن به ورودی دستور atan2).

Flower

بسیار ممنون و متشکر، با قرار دادن دستور real در درون پرانتز تانژانت این مشکل حل شد.
این اولین باره که من از کلیدستان و یک انجمن استفاده می کنم و لذت حل مشکل از طریق مطرح کردن سوال را می چشم.
خیلی سپاس گذارم و از سایت خوبتان زیاد استفاده می کنم.
خدا خیرتون بده.
پاسخ
 سپاس شده توسط admin

مشکل atan2 (در متلب - MATLAB)

#4
(۱۳۹۷/۰۵/۱۲, ۰۶:۴۶ ب.ظ)admin نوشته: سلام.
بنده کدها را بررسی نکردم، ولی همان طور که از پیام خطا مشخص است، اخطار داده شده که باید ورودی دستور atan2 ، اعداد حقیقی (Real) باشند. 
بنابراین احتمالا ورودی دستور، یک عدد مختلط بوده که دارای بخش موهومی (Imaginary) بوده است و بنابراین دستور atan2 خطا می دهد.
در خود Help نرم افزار متلب، می توانید شکل استفاده از دستور atan2 را ببینید.
دستور imag برای به دست آوردن بخش موهومی (Imaginary) یک عدد مختلط و دستور real برای به دست آوردن بخش حقیقی (Real) یک عدد مختلط به کار می رود و می توانید از این دو دستور در متلب (MATLAB) استفاده کنید تا بخش های حقیقی (Real) و موهومی (Imaginary) اعداد مختلط را به دست آورید و سپس مطابق عملیات مورد نظر خود، از آنها استفاده نمایید (مثل دادن به ورودی دستور atan2).

Flower

فقط یه سوال دیگه این که چطور میشه که یه قسمت موهومی به عدد ما اضافه می شه؟
ممکنه این کد باعث ایجادش شده باشه؟ :

amdx(i+1)=(T*cosd(gamma_m(i))-L(i+1)*sind(gamma_m(i))-D(i+1)*cosd(gamma_m(i)))/m

amdy(i+1)=(L(i+1)*cosd(gamma_m(i))+T*sind(gamma_m(i))-D(i+1)*sind(gamma_m(i))-m*g)/m
پاسخ

مشکل atan2 (در متلب - MATLAB)

#5
(۱۳۹۷/۰۵/۱۲, ۰۸:۰۲ ب.ظ)hosein2662 نوشته: فقط یه سوال دیگه این که چطور میشه که یه قسمت موهومی به عدد ما اضافه می شه؟
ممکنه این کد باعث ایجادش شده باشه؟ :

amdx(i+1)=(T*cosd(gamma_m(i))-L(i+1)*sind(gamma_m(i))-D(i+1)*cosd(gamma_m(i)))/m

amdy(i+1)=(L(i+1)*cosd(gamma_m(i))+T*sind(gamma_m(i))-D(i+1)*sind(gamma_m(i))-m*g)/m

باید نتایج اجرای کدها رو مرحله به مرحله در خروجی متلب (MATLAB) چک کنید و ببینید که در کدام مرحله، نتایج به صورت عدد مختلط هستند. 
البته در حالت کلی، این موضوع خیلی مهم نیست و حذف قسمت موهومی اعداد ممکن است نتایج عملیات های ریاضی شما را اشتباه کند (بستگی به منطق ریاضی عملیات ها دارد و اینکه آیا بخش موهومی برای محاسبات مهم است یا نه و اینکه اصلا بخش موهومی باید ایجاد می شده یا نه).
توصیه می شود با راهنمایی استاد خود، حتما فرمول های ریاضی اجرا شده توسط کدها را چک کنید و همچنین عملکرد توابع (دستورات) را هم در Help متلب بخوانید و ببینید که در صورت وجود بخش موهومی، چگونه باید از آن توابع (دستورات) استفاده شود.

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

مشکل atan2 (در متلب - MATLAB)

#6
(۱۳۹۷/۰۵/۱۳, ۱۰:۴۸ ق.ظ)admin نوشته:
(۱۳۹۷/۰۵/۱۲, ۰۸:۰۲ ب.ظ)hosein2662 نوشته: فقط یه سوال دیگه این که چطور میشه که یه قسمت موهومی به عدد ما اضافه می شه؟
ممکنه این کد باعث ایجادش شده باشه؟ :

amdx(i+1)=(T*cosd(gamma_m(i))-L(i+1)*sind(gamma_m(i))-D(i+1)*cosd(gamma_m(i)))/m

amdy(i+1)=(L(i+1)*cosd(gamma_m(i))+T*sind(gamma_m(i))-D(i+1)*sind(gamma_m(i))-m*g)/m

باید نتایج اجرای کدها رو مرحله به مرحله در خروجی متلب (MATLAB) چک کنید و ببینید که در کدام مرحله، نتایج به صورت عدد مختلط هستند. 
البته در حالت کلی، این موضوع خیلی مهم نیست و حذف قسمت موهومی اعداد ممکن است نتایج عملیات های ریاضی شما را اشتباه کند (بستگی به منطق ریاضی عملیات ها دارد و اینکه آیا بخش موهومی برای محاسبات مهم است یا نه و اینکه اصلا بخش موهومی باید ایجاد می شده یا نه).
توصیه می شود با راهنمایی استاد خود، حتما فرمول های ریاضی اجرا شده توسط کدها را چک کنید و همچنین عملکرد توابع (دستورات) را هم در Help متلب بخوانید و ببینید که در صورت وجود بخش موهومی، چگونه باید از آن توابع (دستورات) استفاده شود.

Flower
 بسیار متشکر و ممنون از پاسخ مفصل جناب عالی.
بنده کد رو چک کردم و صرفا بخاطر قرار ندادن یک پرانتز که یاعث می شد یک عدد به توان 997/1000 برسه ، عدد مختلط ایجاد می کرد.
ممنون.
پاسخ
 سپاس شده توسط admin ، شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان