Witam wszystkich,
staram się napisać prosty program obliczający wartość funkcji, który po podaniu wartości najwyższego wykładnika zapyta o współczynniki A,B,C itd w zależności od wartości wykładnika, następnie obliczy f(x) oraz narysuje wykres w .png.
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
Console.WriteLine("Wpisz wartosc najwyzszego wykladnika:");
int iloscN = int.Parse(Console.ReadLine());
double[] wartosc_poteg = new double[iloscN];
for (int i = 0; i < iloscN; i++)
{
wartosc_poteg[i] = iloscN- i;
}
Tutaj program pobiera od użytkownika wartość największego wykładnika oraz tworzy tablice potrzebną do obliczenia f(x)
double[] X = new double[iloscN];
for (int i = 0; i < iloscN; i++)
{
X[i] = i;
}
Tworze tablice dla x-ów od zera do takiej wartości potęgi najwyższego wykładnika (takie założenie)
double[] wspolczynniki = new double[iloscN];
for (int i = 0; i < iloscN; i++)
{
wspolczynniki[i] = double.Parse(Console.ReadLine());
Console.WriteLine("Wcisnij Enter");
}
Wpisywanie wartości współczynników i zapisywanie go do tablicy
for (int j = 0; j < iloscN; j++)
{
for (int i = 0; i < iloscN; i++)
{
funkcjaY[j] += wspolczynniki[i] * Math.Pow(X[j],wartosc_poteg[i]);
// Console.WriteLine("{0}*{1}^{2}=", wspolczynniki[i], X[j], wartosc_poteg[i]);
// Console.WriteLine(funkcjaY[j]);
}
//Console.WriteLine(funkcjaY[j]);
}
Console.ReadLine();
Obliczanie f(x) – jak sprawdzałem wszystko wychodzi poprawnie, usuwając komentarze można sprawdzić poprawność wyników
Do tego momentu wszystko działa poprawnie, jednak tutaj zaczyna się mój problem.
var chart = new Chart();
chart.Size = new Size(1000, 500);
var chartArea = new ChartArea();
chartArea.AxisX.LabelStyle.Format = "";
chartArea.AxisX.MajorGrid.LineColor = Color.LightGray;
chartArea.AxisY.MajorGrid.LineColor = Color.LightGray;
chartArea.AxisX.LabelStyle.Font = new Font("Consolas", 8);
chartArea.AxisY.LabelStyle.Font = new Font("Consolas", 8);
chart.ChartAreas.Add(chartArea);
var series = new Series();
series.Name = "Series1";
series.ChartType = SeriesChartType.Spline;
series.XValueType = ChartValueType.Double;
chart.Series.Add(series);
// rodzaj wykresu itd
chart.Series["Series1"].Points.DataBindXY(X, funkcjaY);
//podawanie X i Y dla funkcji
chart.Invalidate();
//rysowanie funkcji
chart.SaveImage("chart.png", ChartImageFormat.Png);
//zapisywanie do pliku
Jest to kod, który znalazłem w jednym z tematów na innym forum. Mam problem z tym fragmentem kodu:
chart.Series["Series1"].Points.DataBindXY(X, funkcjaY);
Jeśli ręcznie w programie wypisałbym jedną i drugą tablice w postaci
X[0] = 0;
X[1] = 1;
itd
tak samo dla tablicy funkcjaY to cały wykres rysuje się poprawie.
Identycznie jest w sytuacji gdybym ręcznie zapisał wartości w tablic w klamrach
double[] X = new double[] { 0,1, 2, 3, 4 , itd};
Jeśli jednak zostawiam to na wykresie nie wyświetla mi się nic, a ja chciałbym jakby "wywołać" moje X otrzymane w tablicy poprzez petle for oraz funkcjeY otrzymaną poprzez obliczenia wykonane w pętli for.
Jest w ogóle jakaś możliwość rozwiązania tego problemu, tak abym nie musiał wpisywać tego ręcznie tylko program w jakis sposób "wywołał" wartości moich tablic?