2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Не могу найти ошибку на С++
Сообщение05.06.2013, 11:16 
Это программа не дает точный значению, не могу найти где ошибка. Я работаю на компиляторе Dev C++ 5.3.0.4, может проблема в компиляторе??

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <iostream>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <fstream>
using namespace std;
const float hx=0.01, hy=0.01;
const int a=-1,b=1,c=0,d=2,s=300;
main()
{
        ofstream out("Otvet_trap_h01.txt");
        int nx=(b-a)/hx;
        int ny=(d-c)/hy;
        float y[s],x[s],u[s][s];
   
        x[0]=a;y[0]=c;
        for (int i=0;i<=nx;i++)
      x[i]=x[0]+i*hx;
    for (int j=0;j<=ny;j++)
      y[j]=y[0]+j*hy;
    for (int i=0;i<=nx;i++)
    for (int j=0;j<=ny;j++)
      u[i][j]=cos(M_PI*x[i]/2)*sin(M_PI*y[j]/2);
    for (int i=1;i<nx;i++)
        for (int j=1;j<ny;j++)
          out<<setprecision(8)<<"u["<<i<<","<<j<<"]"<<"   "<<u[i][j]<<endl;
         
     
}


Сама задача вот такой:
$$u\left( x,y \right)=\cos \left( \frac{\pi x}{2} \right)\sin \left( \frac{\pi y}{2} \right),\,\,\,\,\,\,-1\le x\le 1,\,\,\,0\le y\le 2$ $

 
 
 
 Re: Не могу найти ошибку на С++
Сообщение05.06.2013, 12:10 
Аватара пользователя
Что значит точно? Как вы проверяли точность и какую ожидали увидеть?

 
 
 
 Re: Не могу найти ошибку на С++
Сообщение05.06.2013, 12:25 
Если $i=1,\,\,\,\,\,\,j=194 $ в отчете дает $
   {{u}_{1,194}^{pribl}}\approx \text{0}\text{.0014771894}  $
точный значений $u_{1,194}^{tochniy}=0.0931694565731314$

 
 
 
 Re: Не могу найти ошибку на С++
Сообщение05.06.2013, 12:51 
abat_1984 в сообщении #732870 писал(а):
Используется синтаксис C++
for (int i=1;i<nx;i++)
Вот последний цикл — правильный. А все предыдущие цепляют лишний элемент.
А M_PI — это $\pi$? А то не описано нигде.
Хорошо бы проверить ещё несколько элементов матрицы. Хотя б с десяток.

 
 
 
 Re: Не могу найти ошибку на С++
Сообщение05.06.2013, 13:49 
Аватара пользователя
abat_1984
1. $u_{1,194}^{tochniy}=0.0931694565731314$ это значение неверное. А вот 0.0014771894 близко к верному. Нетрудно проверить через ряд Тейлора.
2. Точное значение вы получить не можете в принципе. В виду того что sin и cos могут иметь бесконечное число знаков после запятой.
3. Зато можно вычисления построить так чтобы ошибка была минимальной, меньше допустимого значения eps.

-- Ср июн 05, 2013 15:48:53 --

Вот если $i=0$ , $j=194$ то там будет $u_{0,194}\approx 0.094$
Вот только 0 индексы у вас не выводятся.

 
 
 
 Re: Не могу найти ошибку на С++
Сообщение05.06.2013, 15:13 
Pavia в сообщении #732955 писал(а):
abat_1984
1. $u_{1,194}^{tochniy}=0.0931694565731314$ это значение неверное. А вот 0.0014771894 близко к верному. Нетрудно проверить через ряд Тейлора.
2. Точное значение вы получить не можете в принципе. В виду того что sin и cos могут иметь бесконечное число знаков после запятой.
3. Зато можно вычисления построить так чтобы ошибка была минимальной, меньше допустимого значения eps.

-- Ср июн 05, 2013 15:48:53 --

Вот если $i=0$ , $j=194$ то там будет $u_{0,194}\approx 0.094$
Вот только 0 индексы у вас не выводятся.


Да спасибо, оказывается я неправильно рассчитал точный значений. :oops:

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group