ايران ويج

نسخه‌ی کامل: ترسیم نمودار
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام

نموداری( پزشکی) میخوام ترسیم کنم که هزاران x و هزاران y را در چند سیکل زمانی ترسیم کنه و بعد از رسم نمودار انتگرال ناحیه ی زیرین نمودار محاسبه شود.


راهنمایی بیشتر( مثال)
مثل نوار قلب که به صورت خیلی طولانی ترسیم میشه

لینک زیر رو ببینید.
http://fa.wikipedia.org/wiki/%D9%BE%D8%B...tegral.svg

و در نهایت بعد از ترسیم میخوام انتگرال سطح زیرین نمودار رو محاسبه کنه.

به نظر شما کدوم برنامه میتونه این ترسیم رو بدون خطا انجام بده؟

متلب چطوره؟آیا پاسخگوی سوال من(البته به صورت سیکل ) هست؟
سلام
تا اونجایی که من می دونم اگر بخواید از نرم افزار متلب استفاده کنید. باید تابع ریاضی نمودار رو داشته باشید. مثلا
تابع شما x-2 به توان 2 باشه و از بازه ی 0 تا 4 بخواید انتگرال رو حساب کنید، که تو متلب کدش به صورت زیر میشه
کد:
>> Fnc = @(x)(x-2).^2;
>> q = quad(Fnc,0,4)

توی مثال بالا ما از دستور آماده quad که در متلب وجود داره و کار انتگرال گیری رو انجام میده، استفاده کردیم، ولی برای کار شما که یه نمودار بسیار پیچیده و غیر استاندارد دارید، بعید می دونم به این راحتی ها با متلب مساحت زیرش رو بتونید محاسبه کنید.
البته شاید هم بشه ولی من بلد نیستم.

من در حال نوشتن یه برنامه برای آنالیز نمودار های X-Ray هستم، که نمودارهایی رو باید تحلیل کنه که شبیه نمودارهایی هست که شما گفتید.

کدنویسی محاسبه مساحت زیر نمودار رو انجام دادم(با زبان سی شارپ)، بسته به نمودار، می تونه خطاش زیاد یا کم باشه، هنوز دارم روش کار می کنم تا خطاش رو خیلی کم کنم.
البته هیچ وقت نمیشه به خطای صفر رسید، چون حتی برای نمودار های استانداردهم خطا صفر نمیشه، چه برسه به این نمودارهای درهم و برهم.

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

در ضمن تا تکمیل شدن نرم افزار که حدود 10 ماه دیگه طول میکشه، نمی تونم نحوه ی کد نویسیش رو فاش کنم چون تقریبا از یه الگوریتم جدید استفاده کردم که خطا رو نسبت به نرم افزار های مشابهش، به شدت کاهش داده.

موفق باشید.
این مطلب رو اضافه کنم که محور x ها همواره مقادیر بین 0 تا 90 (درجه-

برای حرکت زانو) هست.و محور yها نیروی وارد بر زانوی شخص وارتباط بین این

دو مقدار مشخص نیست.

نرم افزار آماری دیگه ای وجو.د نداره که این کارو براحتی انجام بده؟


به نظر شما فرمان plot میتونه با ایجاد نقطه روی محورها محاسبه ی مربوطه

رو بدون خطا انجام بده ؟

مثلا دو تا آرایه برای مقادیر x,y تعریف کنیم و بعد تو یه یه حلقه مقادیر

رو ارسال کنیم به این تابع تا بعد از ایجاد نقاط و اتصال اونا بهم منحنی

مربوطه ترسیم و با انتخاب بهترین منحنی و وصل کردن ابتدا و انتهای منحنی

بدست آمده به محور x ها نتیجه مطلوب رو پیدا کرد؟



من متوجه نشدم شما می خواید مساحت زیر نمودار رو حساب کنید یا به یک رابطه که ارتباط x و y رو بیان کنه دست پیدا کنید؟؟؟

دستور plot فقط برای نمایش نمودار به کار میره، یعنی وقتی بخواید یه دید کلی از رفتار داده هاتون داشته باشید استفاده میشه، و هیچ گونه عملیات دیگه ای انجام نمیده، نه خطوط رو به هم وصل می کنه و نه هیچ کار دیگه ای، البته شکل ظاهری ای که از نمو دار به ما نشون می ده، خطوط رو به هم وصل کرده، ولی در حقیقت خطوط رو به هم وصل نمیکنه، نمی دونم متوجه منظورم شدید یا نه!!!!

اگر مساحت زیر کل نمودار رو می خواید، این ایده ای که دادید می تونه عملی باشه، بستگی به شکل نمودارتون داره. برای نمودار های مورد استفاده من، این روش شما جواب نمیده.
بهر حال برای تکمیل و اصلاح پیشنهاد جالب شما جهت محاسبه مساحت باید بگم که با دو روش می تو نید این کار رو بکنید:

روش اول: با استفاده از دو نقطه (x1,y1) و (x2,y2)معادله یک خط رو بدست بیارید. بعد با ارسال این معادله به تابع quad مساحت زیر این خط رو محاصبه کنید، بعد با استفاده از دو نقطه (x2,y2) و (x3,y3)معادله بعدی رو بدست بیارید و ...
و در نهایت مجموع مساحت های محاسبه شده، مساحت زیر نمودار رو بهتون میده. که این کار هارو باید با حلقه for انجام بدید.

روش دوم: با استفاده از هر دو نقط مثل(x1,y1) و (x2,y2)، مساحت ذوزنقه ها رو بدست بیارید و با هم جمع کنید، که این روش دقیق تر از روش قبل میشه.

احتمالا روش های بهتری هم باشه ولی چیزی بهتر از این به ذهنم نرسید.
ببینید من چنین کدی رو با داده های فرضی و کم در نظر میگیرم.

x= 0:2
y=1:3
for cnt=1:3
plot(x(cnt),y(cnt))

حالا میخوام انتگرال گیری رو با استفاده از تابع int انجام بدم.

این انتگرال رو شما چطور می نویسید؟این نمونه رو تست میکنید بیزحمت؟

(۲۵-اردیبهشت-۱۳۹۱, ۰۰:۴۹:۳۲)فاطمه وطن دوست نوشته است: [ -> ]سلام

نموداری( پزشکی) میخوام ترسیم کنم که هزاران x و هزاران y را در چند سیکل زمانی ترسیم کنه و بعد از رسم نمودار انتگرال ناحیه ی زیرین نمودار محاسبه شود.


راهنمایی بیشتر( مثال)
مثل نوار قلب که به صورت خیلی طولانی ترسیم میشه

لینک زیر رو ببینید.
http://fa.wikipedia.org/wiki/%D9%BE%D8%B...tegral.svg

و در نهایت بعد از ترسیم میخوام انتگرال سطح زیرین نمودار رو محاسبه کنه.

به نظر شما کدوم برنامه میتونه این ترسیم رو بدون خطا انجام بده؟

متلب چطوره؟آیا پاسخگوی سوال من(البته به صورت سیکل ) هست؟
از اونجایی که شما نمودارتون رو بر پایه هزاران نقطه متصل به هم رسم کردید نه به وسیله یک

تابع خاص، پس به نظرم به جای گرفتن انتگرال می تونید مساحت رو به شیوه نمودار ستونی

محاسبه کنید، یعنی مساحت می شه مجموع تمام y های شما.

برای رسمش هم کافیه پس از جانمایی نقاط، اونها رو به هم متصل کنید.

یک کامپوننتی هست به نام Fusion Chart که می تونه کمک زیادی برای شما باشه.

(۲۵-اردیبهشت-۱۳۹۱, ۱۵:۵۶:۲۶)فاطمه وطن دوست نوشته است: [ -> ]ببینید من چنین کدی رو با داده های فرضی و کم در نظر میگیرم.

x= 0:2
y=1:3
for cnt=1:3
plot(x(cnt),y(cnt))

حالا میخوام انتگرال گیری رو با استفاده از تابع int انجام بدم.

این انتگرال رو شما چطور می نویسید؟این نمونه رو تست میکنید بیزحمت؟

اول باید بگم که اصلا کاری با دستور plot نداریم.
و اینکه دستور plot رو اشتباه نوشتید، باید کد های بالا رو به صورت زیر می نوشتید.
کد:
>> x=0:2;
>> y=1:3;
>> plot(x,y)

و حالا نحوه محاسبه انتگرال:
البته قبلش بگم که بجای x و y ، من از a و b استفاده کردم
یعنی مختصات x رو توی a و مختصات y رو توی b گذاشتم.
به عبارت دیگه 3 تا نقطه دارم
(a3,b3) و (a2,b2) و (a1,b1)

...................................
کد:
%% start

clc
clear
close all;

%% Define Variables

a = 0:2;
b = 1:3;
syms x;
sum = 0;

%% Make Functions & Calculate Integral

for cnt=1:2
m = (b(cnt) - b(cnt+1)) ./ (a(cnt) -a (cnt+1));
y = m .* (x - a(cnt)) + b(cnt);
sum = sum + int(y,a(cnt),a(cnt+1));
end

%% Display Result
plot(a,b);
disp(sum);

دستور plot رو همینجوری نوشتم تا تابع رو نشونتون بده وگرنه برامون هیچ کار مفیدی انجام نمیدهSmile

راستی، این کدها رو توی m فایل نوشتم نه توی Command Window
برای ایجاد یه m فایل باید مسیر زیر رو دنبال کنی
file>new>script
وبعد هم F5 رو برای اجرای برنامه بزنی
جواب انتگرال هم توی Command window نشون داده میشه
خدمت خواهر گرامی
برنامه خیلی ساده ای است فقط اگر ایکس ها از یک الگوی ترتیبی پیروی کند خیلی خیلی ساده ترهم می شود
مثلا
1و2 2و7 3و0 4و25 5و14 .... ایکس ها صعودی اند
در غیر این صورت باید مجموعه داده ها بر اساس ایکس سورت شوند
اگر فاصله ایکس ها از هم دیگر مقدار ثابتی باشد( در اعداد بالا یک است)
در اینصورت انتگرال گیری مساحت زیر منحنی خیلی ساده تر است (تک تک ایگرگ ها در فاصله ضرب می شود)
در غیر اینصورت هر ایگرگ در دیفرانسیل نقاط ایکس مر بوطه ضرب شده وباهم جمع می شوند
رسم نمودار هم اگر طولش خیلی بلند باشد با بر نامه های اماری قابل نشان دادن است (اگر که قابل نوشتن هم است)