Документ взят из кэша поисковой машины. Адрес оригинального документа : http://wasp.phys.msu.ru/forum/lofiversion/index.php?t14580.html
Дата изменения: Unknown
Дата индексирования: Mon Apr 11 15:26:00 2016
Кодировка: Windows-1251
Студенческий форум Физфака МГУ > Вопрос по MATLAB
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по MATLAB
Студенческий форум Физфака МГУ > Наука физика > Есть проблема
Krypto
Помогите, я не халявщик и действительно пытаюсь понять.У меня возникла проблема. Задача была изобразить зависимость давления 1 моля Ван-дер-Ваальсовского газа от обьема (2D график) и от объема и температуры (3D график). Уравнение Ван-дер-Ваальса p=RT/(V-cool.gif-a/V^2; параметры даны: R=0.082; a=3.67; b=0.013; T=298 (я опустил размерности). Ну вроде бы как все. Задал значения переменных в интервалах и с шагом попытался написать само уравнение. Тут и возникли трудности. Как организовать поэлементные операции? Ведь перед значком операции нужно ставить точку. Но MATLABу это не нравится - ругается. В итоге я поубирал некоторые точки и ввел такое: p=R*T./(V-0.013)-3.67./V.^2. Вообщем получилось у меня что-то невразумительное с отрицательным давлением. Как правильно ввести формулу? И главное - как постороить трехмерный график? Я пытаюсь, но он выдает мне какую-то плоскую линию.2D изотерма должна получиться такой (одна из них): http://www.chem.msu.su/rus/teaching/realgases/pic1.4.gif
Вместо этого получается какой-то бред.
Код
>> R=0.082;
>> T=298;
>> a=3.67;
>> b=0.013;
>> V=[0:.1:10];
>> p=R*T./(V-b)-a./V.^2;
Warning: Divide by zero.
>> plot(V,p)

Какая-то изотерма непонятная. Чего-то снизу идет. График должен быть не такой. Что я делаю не так?
Марсианин
Все-таки, какие размерности этих величин? Возможно, вы ошиблись с одной из констант?
Homo Sapiens
Цитата(Krypto @ 25.06.2008, 12:19) *
>> p=R*T./(V-B )-a./V.^2;
Warning: Divide by zero.

Так погодите. У вас же V - это число, пробегающее значения:
Цитата(Krypto @ 25.06.2008, 12:19) *
>> V=[0:.1:10];


На каком-то шаге знаменатель, вероятно, обращается в ноль (хотя надо проверить, проделайте это сами) и матлаб об этом честно говорит... Я не удивлюсь, что он построит что-то не то.
UPD. Да, собственно, на первом же шаге он ошибку и дает =). Начните с 0.1 и посмотрите, что будет
Или это и так всем понятно и известно?
ion
Для Krypto.

1. У Вас V(1)=0, а V стоит во втором члене в знаменателе - вот Matlab и ругается.
2. Формула Ван-дер-Ваальса справедлива для V>b. При вычислении у Вас V(0) и V(1) меньше b=0.13. Эти точки нужно отбросить.
3. Масштаб для V (V=[0:.1:10]; ) у Вас выбран совсем неудачно для Ваших параметров a и b. Нужно что-то вроде V=[0.014:.001:0.1]; тогда будет все как надо. Но параметры все-равно какие-то левые. Формула Ван-дер-Ваальса справедлива для V \gg b,p \gg \frac{a}{{V^2 }}.

P.S. Упс, про первый шаг уже написал Homo Sapiens. Я проглядел (и не мудрено - зачем использовать мелкий шрифт, у меня на КПК трудно рассмотреть). Но, конечно, проблема не в делении на 0, а в попытке построить изотерму в области параметров, где уравнение несправедливо.
Krypto
Большое всем спасибо! Я уже разобрался. Еще вопрос.
Вот M-file("liqe.m"):
Код
function y=liqe(k,p);
y=k(1)*k(2).*p./(1+k(1).*p)+(1-k(2))*k(3).*p./(1+k(3).*p);

А вот сам код:
Код
>> teta=[.222 .224 .157 .128 .409 .482 .569 .669 .781 .806];
>> p=[2.9 3.3 7.7 12.3 23 44.9 93 180.6 360.1 722.2];
>> plot(p,teta,'o')
>> hold on
>> xlabel('Axis p')
>> ylabel('Axis teta')
>> k0=[1 1 1];
>> lsqcurvefit('liqe',k0,p,teta)
>> x=[0:800];
>> y=ans(1)*ans(2).*x./(1+ans(1).*x)+(1-ans(2))*ans(3).*x./(1+ans(3).*x);
>> plot(x,y)

Здесь все очень сильно зависит от начального приближения. Что делать? Как сделать так, чтобы верхняя правая часть графика проходила ближе к точке. Как узнать эти начальные приближения?
Homo Sapiens
Цитата(Krypto @ 26.06.2008, 22:05) *
Большое всем спасибо! Я уже разобрался. Еще вопрос.

Наверное, все же стоило сказать, где же собственно была ошибка(и). =)
Цитата(Krypto @ 26.06.2008, 22:05) *
Здесь все очень сильно зависит от начального приближения. Что делать?

Матлаба нет, помочь ничем не могу. Играться с данными и смотреть, что получается в итоге - это универсальный путь...
Krypto
Ошибка состоит в том, что даны какие-то левые параметры a и b. Подставляю другие, из справочника, все прекрасно получается.
Комбинаций 50 перебрал - безрезультатно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2016 IPS, Inc.