Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: 2d-algebra

Sivun loppuun

JoinTuanJanohon [12.03.2008 15:18:56]

#

(Mod. siirsi toisesta keskustelusta, jossa riitely jo alkoi.)

Jaa, tuossa on sitten 2d-algebra ilman takaisinkytkentää 2d-kompleksisfääreihin. Algebran aksioomat pitävät. Funktioiden tarkoitusperät kertoo niiden nimet, miten algebrassa ja varsinkin C:ssä asiat on tapana ilmaista.

Hyvä lopputyön aihe jollekin signaalinkäsittelylle kiinnostuneelle. DFT/IDFT antaa puolet efektiivisemmän pakkaussuhteen. Itse sovellan mittaus- ja säätötekniikkaan työkseni.

Tuon asian ymmärtämiseen minulta kului muutoin melkein kaksi vuosikymmentä. Kai sillä samalla energialla olisi jonkun yliopistokin käynyt, mutta kun kiinnostaa vain se, mikä kiinnostaa. (Tässä ketjussa oli kaiketi tarkoitus puhua matematiikasta, ja sen vierestä...)

#include <math.h>
#include <stdio.h>

typedef long double lreal;
#define lr(cx) (lreal)(cx)

class real2d
{
   public:

   lreal e[4];
   real2d(void);

   real2d(int);
   real2d(int, int);
   real2d(int, int, int, int);

   real2d(lreal);
   real2d(lreal, lreal);

   friend int ifpos(real2d);
   friend lreal abs(real2d);
   friend void print(real2d);

   friend real2d sqrt(real2d);
   friend real2d reduse(real2d);
   friend real2d operator-(real2d);

   friend real2d operator+(real2d, real2d);
   friend real2d operator-(real2d, real2d);

   friend real2d operator*(real2d, real2d);
   friend real2d operator/(real2d, real2d);

   friend real2d operator*(lreal, real2d);
   friend real2d operator/(real2d, lreal);

   friend real2d operator*(real2d, lreal);
   friend real2d operator/(lreal, real2d);

   /* mgn = luvun suuruus */
   friend lreal mgn(real2d);
   friend real2d ln(real2d);
   friend real2d exp(real2d);
   friend real2d sin(real2d);
   friend real2d cos(real2d);
   friend real2d pow(real2d, int);
   friend real2d pow(real2d, lreal);
   friend real2d pow(real2d, real2d);
};

real2d::real2d(lreal a)
{
   e[0]=a; e[1]=0;
   e[2]=e[3]=0.00;
}

real2d::real2d(lreal a, lreal b)
{
   e[0]=a; e[2]=b;
   e[1]=e[3]=0.00;
}

real2d::real2d(int a)
{
   *this=real2d((lreal)a);
}

real2d::real2d(int a, int b)
{
   *this=real2d((lreal)a, (lreal)b);
}

real2d::real2d(int a, int b, int c, int d)
{
   e[0]=a; e[1]=b;
   e[2]=c; e[3]=d;
}

real2d::real2d(void)
{
   *this=real2d((lreal)0);
}

real2d reduse(real2d a)
{
   a.e[0]-=a.e[1];
   a.e[2]-=a.e[3];
   a.e[1]=a.e[3]=0;
   return (real2d)a;
}

lreal abs(real2d a)
{
   lreal x = a.e[0]-a.e[1];
   lreal y = a.e[2]-a.e[3];
   return lr(fabsl(x - y));
}

lreal mgn(real2d a)
{
   lreal x=a.e[0]-a.e[1];
   lreal y=a.e[2]-a.e[3];
   return fabsl(x)+fabsl(y);
}

int ifpos(real2d a)
{
   lreal x=a.e[0]-a.e[1];
   lreal y=a.e[2]-a.e[3];

   if (x>=0.0)
   {
      return fabsl(y)<=x? 1: 0;
   }
   else
   {
      return 0;
   }
}

real2d operator-(real2d a)
{
   for (int i=0; i<4; i++)
   a.e[i]=-a.e[i];
   return reduse(a);
}

real2d operator+(real2d a, real2d b)
{
   for (int i=0; i<4; i++)
   a.e[i]+=b.e[i];
   return reduse(a);
}

real2d operator-(real2d a, real2d b)
{
   for (int i=0; i<4; i++)
   a.e[i]-=b.e[i];
   return reduse(a);
}

real2d operator*(real2d a, real2d b)
{
   real2d t(0.0);
   for (int i=0; i<4; i++)
   for (int j=0; j<4; j++)
   t.e[i^j]+=a.e[i]*b.e[j];
   return reduse(t);
}

real2d operator/(real2d x, real2d y)
{
   lreal X[4];
   lreal K[4*4+4];

   for (int n=0, p=0; n<4; n++)
   {
      for (int i=0; i<4; i++)
      for (int j=0; j<4; j++)
      {
         if (n == (i^j))
         {
            K[p]=y.e[j]; ++p;
         }
      }
      K[p]=x.e[n]; ++p;
   }

   // gsolve ratkaisee lineaarisen yhtälöryhmän
   // Gaussin eliminointimenetelmällä...
   int gsolve(lreal*, lreal*, int);

   gsolve(X, K, 4);
   lreal a=X[0]-X[1];
   lreal b=X[2]-X[3];
   return real2d(a, b);
}

void swapRows(lreal *a, lreal *b, int n)
{
   for (int i=0; i<n; i++)
   {
      lreal tmp=a[i];
      a[i]=b[i];
      b[i]=tmp;
   }
}

////////////////////////////////////////////////
// qsolve palautusarvo:                       //
//    1 <=> yhtälöryhmälle oli ratkaisu       //
//    0 <=> yhtälöryhmälle ei ollut ratkaisua //
////////////////////////////////////////////////
int gsolve(lreal *X, lreal *f, int n)
{
   lreal k, J;
   lreal *max, *mux;
   int i, j, x, M=(int)n+1;

   for (i=0; i<n-1; i++)
   {
      max=f+i+i*M;
      for (j=i+0x01; j < n; j++)
      if (fabsl(*(mux=f+i+j*M))>fabsl(*max)) max=mux;

      if (max!=(mux=f+i+i*M))
      swapRows(max, mux, M-i);

      if (fabsl(J=f[i+i*M])<(lreal)1e-20)
      return 0; /* eipä ole ratkaisuva */

      for (j=i+1; j<n; j++)
      {
         if (f[i+j*M])
         {
            k=-f[i+j*M]/J;
            for (x=i+1; x<M; x++)
            f[x+j*M]=f[x+j*M]+k*f[x+i*M];
         }
      }
   }

   for (i=n-1; i>=0; i--)
   {
      k=(lreal)f[n+i*M];
      for (j=n-1; j > i; j--)
      k=k-(lreal)(X[j]*f[j+i*M]);

      if (fabsl(J=f[i+i*M])<(lreal)1e-20)
      return 0; /* eipä ole ratkaisua */
      else X[i]=k/J; /* onpa ratkaisu */
   }

   return 1;
}

real2d operator*(lreal k, real2d b)
{
   real2d a(k);
   return a*b;
}

real2d operator/(real2d a, lreal k)
{
   real2d b(k);
   return a/b;
}

real2d operator*(real2d a, lreal k)
{
   real2d b(k);
   return a*b;
}

real2d operator/(lreal k, real2d b)
{
   real2d a(k);
   return a/b;
}

real2d sqrt(real2d c)
{
   if (ifpos(c))
   {
      real2d k(lr(0.5));
      real2d x(lr(1.0));

      for (int i=0; i<256; i++)
      {
         x=k*(x+c/x);
      }
      return x;
   }
   else
   {
      /* virhe, luku ei ole positiivinen */
      return real2d(-(lreal)0xfedca201L);
   }
}

void print(real2d a)
{
   a = (real2d) reduse(a);
   printf("(%0.21f, %0.21f)\n",
   (double)a.e[0], (double)a.e[2]);
}

real2d pow(real2d x, int n)
{
   if (n)
   {
      real2d t=x;
      int i=n<0? -n: n;
      for (--i; i; i--) t=t*x;
      return n>0? t: real2d(1.0)/t;
   }
   else
   {
      return real2d(1.0);
   }
}

real2d ln(real2d c)
{
   int n=1;
   lreal t;
   real2d fx, dx;
   real2d x1, x2;
   real2d z(1.0);
   real2d x(1.0), xx;
   #define MAX 3.14159265e+36

   if (!ifpos(c))
   {
      /* virhe, luku ei ole positiivinen */
      return real2d(-(lreal)0xfedca201L);
   }

   while (abs(c)>lr(1.001))
   {
      c=sqrt(c);
      n+=n;
   }

   for (int k=2; k<160; k++)
   for (int j=0; j<160; j++)
   {
      xx=x; t=1.0;
      fx=z+x; dx=z;

      for (int i=2; i<=k; i++)
      {
         dx=dx+i*xx/(t*=i);
         xx=xx*x; fx=fx+xx/t;
         if (mgn(fx)>MAX) break;
      }

      x1=x;
      x=x-(fx-c)/dx;
      x2=x;

      if (k+1 < 160)
      {
         if (mgn(x1-x2)<1e-15) break;
      }
   }

   return (lreal)n*x;
}

real2d exp(real2d x)
{
   real2d xx;
   lreal t=1.0;
   real2d sum(1.0);

   sum=sum+(xx=x);

   for (int i=2; i<160; i++)
   {
      xx = xx*x;
      sum=sum+xx/(t*=i);
      if (mgn(xx)>MAX) break;
   }

   return sum;
}

real2d pow(real2d a, real2d x)
{
   lreal t=1.0;
   real2d sum(1.000);
   real2d y=x*ln(a), xx=y;

   sum=sum+xx;

   for (int i=2; i<160; i++)
   {
      xx = xx*y;
      sum=sum+xx/(t*=i);
      if (mgn(xx)>MAX) break;
   }

   return sum;
}

real2d pow(real2d x, lreal ex)
{
   return pow(x, real2d(ex));
}

real2d sin(real2d x)
{
   lreal t=1.0;
   real2d sum(0.0);
   real2d y=x*x, xx=x;

   for (int i=1, sg=0; i<160; i+=2, sg++)
   {
      if (sg&1) sum=sum-xx/t;
      else /**/ sum=sum+xx/t;
      xx=xx*y; t*=(i+1)*(i+2);
      if (mgn(xx)>MAX) break;
   }
   return sum;
}

real2d cos(real2d x)
{
   lreal t=2.0;
   real2d sum(1.0);
   real2d y=x*x, xx=y;

   for (int i=2, sg=1; i<160; i+=2, sg++)
   {
      if (sg&1) sum=sum-xx/t;
      else /**/ sum=sum+xx/t;
      xx=xx*y; t*=(i+1)*(i+2);
      if (mgn(xx)>MAX) break;
   }
   return sum;
}

class complex2d
{
   public:

   real2d r, i, j, k;

   complex2d(void);
   complex2d(int);

   complex2d(lreal);
   complex2d(real2d);

   complex2d(lreal, lreal);
   complex2d(real2d re, real2d im);
   complex2d(real2d, real2d, real2d, real2d);

   friend lreal abs(complex2d);
   friend void print(complex2d);
   friend complex2d sqrt(complex2d);
   friend complex2d operator-(complex2d);

   friend complex2d operator+(complex2d, complex2d);
   friend complex2d operator-(complex2d, complex2d);

   friend complex2d operator*(complex2d, complex2d);
   friend complex2d operator/(complex2d, complex2d);

   friend complex2d operator*(lreal, complex2d);
   friend complex2d operator/(complex2d, lreal);

   friend complex2d operator*(complex2d, lreal);
   friend complex2d operator/(lreal, complex2d);

   /* mgn = luvun suuruus */
   friend lreal mgn(real2d);
   friend complex2d ln(complex2d);
   friend complex2d exp(complex2d);
   friend complex2d sin(complex2d);
   friend complex2d cos(complex2d);
   friend complex2d pow(complex2d, int);
   friend complex2d pow(complex2d, lreal);
   friend complex2d pow(complex2d, complex2d);
};

complex2d::complex2d(void)
{
   r=i=j=k=real2d(0);
}

complex2d::complex2d(int a)
{
   r=real2d(a, 0);
   i=j=k=real2d(0);
}

complex2d::complex2d(lreal a)
{
   r=real2d(a, 0.0);
   i=j=k=real2d(0.0);
}

complex2d::complex2d(real2d a)
{
   r=a; i=j=k=real2d(0);
}

complex2d::complex2d(lreal a, lreal b)
{
   r=real2d(a, b);
   i=j=k=real2d(0);
}

complex2d::complex2d(real2d a, real2d b)
{
   r=a; i=b; j=k=real2d(0);
}

complex2d::complex2d(real2d a, real2d b, real2d c, real2d d)
{
   r=a; i=b; j=c; k=d;
}

complex2d operator-(complex2d a)
{
   return complex2d(-a.r, -a.i, -a.j, -a.k);
}

complex2d operator+(complex2d a, complex2d b)
{
   return complex2d(a.r+b.r, a.i+b.i, a.j+b.j, a.k+b.k);
}

complex2d operator-(complex2d a, complex2d b)
{
   return complex2d(a.r-b.r, a.i-b.i, a.j-b.j, a.k-b.k);
}

complex2d operator*(complex2d a, complex2d b)
{
   complex2d c;

   c.r = real2d(1,0,0,0)*a.r*b.r + real2d(0,1,0,0)*a.i*b.i
       + real2d(0,0,1,0)*a.j*b.j + real2d(0,0,0,1)*a.k*b.k;

   c.i = real2d(1,0,0,0)*a.r*b.i + real2d(1,0,0,0)*a.i*b.r
       + real2d(1,0,0,0)*a.j*b.k + real2d(1,0,0,0)*a.k*b.j;

   c.j = real2d(1,0,0,0)*a.r*b.j + real2d(0,0,0,1)*a.i*b.k
       + real2d(1,0,0,0)*a.j*b.r + real2d(0,0,0,1)*a.k*b.i;

   c.k = real2d(1,0,0,0)*a.r*b.k + real2d(0,0,1,0)*a.i*b.j
       + real2d(0,0,1,0)*a.j*b.i + real2d(1,0,0,0)*a.k*b.r;

   return c;
}

complex2d operator/(complex2d a, complex2d b)
{
   complex2d L;
   real2d z(0);

   L=complex2d(b.r, b.i, -b.j, -b.k);
   a = a*L;
   b = b*L;

   L=complex2d(b.r, -b.i, z, z);
   a = a*L;
   b = b*L;

   a.r = a.r/b.r;
   a.i = a.i/b.r;
   a.j = a.j/b.r;
   a.k = a.k/b.r;

   return a;
}

complex2d operator*(lreal a, complex2d b)
{
   return complex2d(a*b.r, a*b.i, a*b.j, a*b.k);
}

complex2d operator/(complex2d a, lreal b)
{
   return complex2d(a.r/b, a.i/b, a.j/b, a.k/b);
}

complex2d operator*(complex2d a, lreal b)
{
   return complex2d(b*a.r, b*a.i, b*a.j, b*a.k);
}

complex2d operator/(lreal a, complex2d b)
{
   return complex2d(a)/b;
}

lreal mgn(complex2d a)
{
   lreal sum=0;
   sum+=mgn(a.r);
   sum+=mgn(a.i);
   sum+=mgn(a.j);
   sum+=mgn(a.k);
   return sum;
}

lreal abs(complex2d a)
{
   complex2d L;
   real2d z(0);

   L=complex2d(a.r, a.i, -a.j, -a.k);
   a = a*L;

   L=complex2d(a.r, -a.i, z, z);
   a = a*L;

   a.r=pow(a.r, lr(0.25));

   return abs(a.r);
}

complex2d sqrt(complex2d c)
{
   if (mgn(c)<1e-20)
   {
      return complex2d(0);
   }
   else
   {
      complex2d x=c;
      for (int i=0; i<160; i++)
      x=x-(x*x-c)/(2.0*x);
      return (complex2d)x;
   }
}

complex2d sin(complex2d x)
{
   lreal t=1.0;
   complex2d sum(0.0);
   complex2d y=x*x, xx=x;

   for (int i=1, sg=0; i<160; i+=2, sg++)
   {
      if (sg&1) sum=sum-xx/t;
      else /**/ sum=sum+xx/t;
      xx=xx*y; t*=(i+1)*(i+2);
      if (mgn(xx)>MAX) break;
   }
   return sum;
}

complex2d cos(complex2d x)
{
   lreal t=2.0;
   complex2d sum(1.0);
   complex2d y=x*x, xx=y;

   for (int i=2, sg=1; i<160; i+=2, sg++)
   {
      if (sg&1) sum=sum-xx/t;
      else /**/ sum=sum+xx/t;
      xx=xx*y; t*=(i+1)*(i+2);
      if (mgn(xx)>MAX) break;
   }
   return sum;
}

complex2d pow(complex2d x, int n)
{
   if (n)
   {
      complex2d t=x;
      int i=n<0? -n: n;
      for (--i; i; i--) t=t*x;
      return n>0? t: complex2d(1.0)/t;
   }
   else
   {
      return complex2d(1.0);
   }
}

complex2d ln(complex2d c)
{
   int n=1;
   lreal t;
   complex2d fx, dx;
   complex2d x1, x2;
   complex2d z(1.0);
   complex2d x(1.0), xx;

   while (abs(c)>1.001)
   {
      c=sqrt(c);
      n+=n;
   }

   for (int k=2; k<160; k++)
   for (int j=0; j<160; j++)
   {
      xx=x; t=1.0;
      fx=z+x; dx=z;

      for (int i=2; i<=k; i++)
      {
         dx=dx+i*xx/(t*=i);
         xx=xx*x; fx=fx+xx/t;
         if (mgn(fx)>MAX) break;
      }

      x1=x;
      x=x-(fx-c)/dx;
      x2=x;

      if (k+1 < 160)
      {
         if (mgn(x1-x2)<1e-15) break;
      }
   }

   return (lreal)n*x;
}

complex2d exp(complex2d x)
{
   complex2d xx;
   lreal t=1.000;
   complex2d sum(1);

   sum=sum+(xx=x);

   for (int i=2; i<160; i++)
   {
      xx = xx*x;
      sum=sum+xx/(t*=i);
      if (mgn(xx)>MAX) break;
   }

   return sum;
}

complex2d pow(complex2d a, complex2d x)
{
   lreal t=(lreal)1;
   complex2d sum(1.000);
   complex2d ln(complex2d);
   complex2d y=x*ln(a), xx=y;

   sum=sum+xx;

   for (int i=2; i<160; i++)
   {
      xx = xx*y;
      sum=sum+xx/(t*=i);
      if (mgn(xx)>MAX) break;
   }

   return sum;
}

complex2d pow(complex2d x, lreal n)
{
   return pow(x, complex2d(n));
}

void print(complex2d a)
{
   printf("[\n");
   printf("   r="); print(a.r);
   printf("   i="); print(a.i);
   printf("   j="); print(a.j);
   printf("   k="); print(a.k);
   printf("]\n");
}

int main(void)
{
   return 0;
}

os [12.03.2008 16:06:33]

#

Olet siis kehittänyt jonkin oman lukujärjestelmän, jota nimität "2d-algebraksi". Ihan hieno, toivottavasti sitä voi käyttää johonkin.

Muiden ymmärrystä asiasta helpottaisi huomattavasti, jos voisit yhdistää tuon johonkin yleisesti tunnettuun matematiikkaan tai kertoa, mitä ominaisuuksia "2d-algebran" luvuilla on, tyyliin:
- "nämä luvut ovat kompleksilukujen yleistys siinä mielessä, että ...",
- "2d-algebran luvut muodostavat ryhmän/kunnan/renkaan..." tai
- "kun tason pistettä / sähkövirtaa / todennäköisyyttä... kuvataan 2d-algebran luvulla, niin kahden luvun kertolasku [tekee jonkin järkevän operaation tehokkaasti ja näppärästi]"

Mitä esimerkiksi tarkoitat "Algebran aksioomilla", "takaisinkytkennällä" tai "2d-kompleksisfäärillä"?

Yliopiston käyminen vaatii aika paljon työtä, mutta opiskelu tai edes matemaattisen kirjallisuuden lukeminen on ainakin omasta mielestäni huomattavasti järkevämpi tapa tutustua matematiikkaan kuin käsitteiden kokeellinen vääntäminen kantapään kautta, mihin saa kyllä kulumaan paljon aikaa, mutta tulokset voivat olla hyvinkin heikkoja (olen myös itse kokeillut).

Matematiikkaa opiskellessa "tylsien pikkuseikkojen" syvällisemmän ymmärtämisen kautta löytyy vastaus moneen mielenkiintoiseen kysymykseen. Oikaistaessa suoraan johonkin "mielenkiintoiseen" asiaan voi kokonaiskuva ja osaaminen jäädä aika hataralle pohjalle.

koo [12.03.2008 17:06:11]

#

Tuolla kun näytetään kovin syvästi viitattavan minun sanomisiini, niin jatkanpa sitten juttua.

Mielestäni en ole vihjaillut yhtään kehenkään henkilökohtaisesti. En ole myöskään pyrkinyt mihinkään egobuustailuun enkä ole mielestäni mitenkään erityisesti hehkuttanut omaa koulunkäymistäni tai -käymättömyyttäni. Kirjoitteluni ydin on siinä, että mielestäni lukion matematiikalle on käyttöä eri tavoin ja eri asioissa, eikä elämäntyön ja -kaaren kannalta näyttäisi olevan ihan yhdentekevää, millaisia kouluja sattuu käymään.

Kommenteissani olen viitannut aiempien kirjoittajien sanomisiin. Kun kommenttini ovat väiteluontoisia, ne lienee ihan helppoa kumota asiatiedoilla tai vastaesimerkeillä ja osoittaa ne pelkäksi päänaukomiseksi.

En mitenkään väheksy itseopiskelua asioiden sisäistämisessä. Kun puhuin itseoppineisiin liittyvistä ongelmista, mielessäni oleva räikein erityistapaus on sellainen, josta en voi julkisesti kertoa. Sen sijaan voin kertoa tapauksesta, jossa kaveri oli opetellut säikeisiin ja lukituksiin liittyvät Java-primitiivit ihan kattavasti omista lähtökohdistaan. Sovellus toimi kuitenkin miten sattuu. Kuvaan vedettiin sitten toinen kaveri, jolla oli käsitys siitä, mikä se sovelluksen rinnakkaistuksen varsinainen ongelma oli. Että kun voimassa ovat nämä oletukset, esi- ja jälkiehdot, niin nämä operaatiot täytyy suojata, ja lukituksilla varmistetaan ehtojen voimassaolo. Tätä toista kaveria oli nimenomaan opetettu tällaiseen analyyttiseen lähestymistapaan ja katsomaan kokonaisuutta. Eka kaveri vielä korjausvaiheessakin ehdotteli, että kyllähän tämä tästä, hän vähän korjailee, kokeilee ja testailee ja lisäilee debug-tulostusta jne. Joopa joo.

Jos asiassa on jotakin epäselvää, niin ehkä joku putkalainen jaksaa kertoa, miksi funktiokuvaukset ja simulointi/testiympäristö eivät ole suotuisa tapa ratkoa tämäntyyppisiä(kään) ongelmia. Mutta ei silti, tuo eka kaveri on paljon toista tuottavampi tekemään Java-pohjaisia veppilomakesovelluksia ja se on minusta ihan helkutin ok juttu.

Jonkinlaiseksi referenssiksi on nyt sitten vedetty moniulotteinen algebra. Termi on minulle aika tuntematon, se ei taida olla ihan sama, millä aihepiiri matematiikan alalla tunnetaan. Sikäli kun jaksoin tuota ensimmäistä linkkiä kahlata, kyse näyttäisi olevan hyperkompleksilukujen ja erityisesti kvaternioiden perusoperaatioiden toteutuksesta C++:lla. Tämä reilut 150 vuotta vanha matematiikan osa-alue vapautuneine algebroineen on tietysti kiinnostava aihepiiri, mutta ei mitenkään erityisesti sensaatiomainen uutuus. Ainakin yksi toinen C++-toteutus on olemassa, halukkaat voinevat vertailla tyyliä, virheettömyyttä, numeerisia menetelmiä ja tehdä omat johtopäätöksensä. 2D-algebrastahan tulikin sitten tuossa erikseen.

Minulla ei ole minkäänlaista ongelmaa kommentoida kenen tahansa väitteitä vaikkapa kasvokkain, joten jotain muutakin vielä pitäisi löytää, jotta täyttäisin varsinaisen mulkun ja kusipään määritelmän. Minulla ei kuitenkaan ole vähäistäkään aikomusta siirtää julkisella palstalla virinnyttä keskustelua sähköpostiin tai muuhun yksityiseen kanavaan; sellainen ei olisi reilua muita palstalaisia kohtaan - ihan niin kuin mikä tahansa netikettikin osaa kertoa.

JoinTuanJanohon [12.03.2008 17:20:42]

#

En ole kehittänyt mitään omaa lukujärjestelmää, vaan yksinkertaisesti kaivanut, tutkinut ja ymmärtänyt algebran syvimmän olemuksen, ja se on: algebra kuvaa luontoa.

Algebran aksioomista, ja niiden tarkoitusperistä löytyy varmaan tietoa, joten turha tässä on ruveta jauhamaan vaihdannaisuudesta, yms. triviaaleista asioista.

Jos on luvut a ja b, niin esim. c=a*b <=> a=c/b <=> b=c/a. On olemassa ainoastaan yksi sellainen 2d-algebran vaihtoehto, jossa algebran aksioomat pitävät, ja jossa kompleksiluvut ovat complex2d -olion aitona osajoukkona. (PS. koo. Kvaterniot eivät ole kommutatiivisia. Edelleen moniulotteisessa algebrassa k*k ei ole -1, vaan –i. Kvaternioissa edelleen |e^(ai+bj+ck...)| on jotain muuta kuin tasan 1. Sen sijaan kompleksiluvuilla, moniulotteisella algebralla, 2d-algebralla, moniulotteisella 2d-algebralla, jne. |e^(ai+bi+cj+...)| on aina tasan 1, koska kaikilla harmonisilla olioilla on ominaisuus sin^2 x + cos^2 x = 1. Perehdy noihin kahteen, niin ei tarvitse lähteä merta edemmäs ihmettelemään numeroiden symmetriaa.)

Ihmisellä kantavektoreiden ja numeroiden pyörittely on kuitenkin rajallista, ja suurin haaste oli ohjelmoida niin tehokas BruteForce (n. 12-14 vuotta), joka nuo harmoniaan johtavat kantavektoreiden tulosäännöt pystyi ratkaisemaan. Ja koska lähes äärettömästä sääntökombinaatioiden joukosta löytyy vain ja ainoastaan yksi vaihtoehto, joka johtaa ristiriidattomuuteen, niin se on algebran sielu.

(Jos nyt kiinnostaa, niin lopullinen ratkaisu löytyi vasta silloin, kun asiaa tutkiva algoritmi oli kehittynyt siihen pisteeseen, että se kokeili heivata ihmisen symboliikan positiivisesta, negatiivisesta, reaalisesta ja imaginaarisesta huidsin nevadaan. Loppujen lopuksi kysymys oli redusoinnista. Kun kone pyörittää lukuja redusoimattomana, se on riippumaton ihmismielen ahtaasta symboliikasta.

Logiikka ei voi perustua symboliikalle, joten sen vuoksi Hamiltonin alkuperäinen visio on vasta nyt tässä ja nyt. Redusointi suoritetaan, ts. käännetään ihmisen symboliikalle vasta sitten, kun ihminen haluaa niitä tuloksiaan katsella. Logiikka ei voi ottaa kantaa siihen, miten päin ihminen on monitorinsa pöydälle asettanut. Mutta jos käytät kiveen hakattuja symboleja positiivinen, negatiivinen, reaalinen ja imaginaarinen, olet sinut vain 1D-algebran kanssa.)

Kompleksisfääreillä tarkoitan kompleksiavaruuksia, jossa esimerkiksi kompleksiluku saa rinnalleen eräänlaisen vastinlogiikalla toimivan kompleksiluvun, joka täydentää kompleksiluvun ominaisuudet symmetrisiksi, kuten imaginaarinen täydentää reaalisen ominaisuudet symmetrisiksi.

Ei ole minun asiani ruveta kertomaan sen enempää, miten rinnakkaiset ilmiöt approksimoidaan yhdeksi funktioksi, derivoidaan, integroidaan ja nähdään ilmiön syy-seuraus suhteet toisenlaisessa mittakaavassa, ja kenties havaitaan, että ilmiön x-kanava supistuu pois ja riippuu yksistään ilmiön syistä funktiolla x=f(a, b, e).

os [12.03.2008 20:00:26]

#

Nyt kun ihan tosissaan ruvettiin vääntämään, niin katsoin tuota koodiasi ja tulin siihen lopputulokseen, että real2d-luvuissassi olet kehittänyt sellaisen kompleksilukuja muistuttavan lukujärjestelmän, joka koostuu lukupareista (x,y), koska kaikkien operaatioden jälkeen rakenteen e[1] ja e[3] -komponentit asetetaan nolliksi. Lukupareissa kompleksilukujen kertolaskusäännön

(a,b) * (c,d) = (ac - bd, ad + bc)

sijaan käytetään laskusääntöä

(a,b) * (c,d) = (ac + bd, ad + bc).

Tämän johdosta jakolaskusääntö muuttuu kompleksilukujen jakolaskusäännöstä

(a,b) / (c,d) = ( (ac+bd)/(cc+dd) , (bc-ad)/(cc+dd) )

säännöksi

(a,b) / (c,d) = ( (ac-bd)/(cc-dd) , (bc-ad)/(cc-dd) ),

mikä on hyvin ikävää, koska jakamista (nollasta poikkeavilla) luvuilla suoralla x=y ei ole määritelty, joten esittämäsi systeemi ei toteuta kunta-aksioomia, eikä siis tässä mielessä ole reaalilukujen laajennus.

Voit itse kokeilla, print(real2d(1,2) / real2d(3,3)) tulostaa

(0.000000000000000000000, -1.#IND00000000000000000)

Toisin kuin kompleksiluvuilla, jolloin kertolasku kuvaa kierto-skaalausta origon ympäri, real2d-lukujen laskutoimituksilla ei taida olla mitään yleisesti järkevää merkitystä.

Pystytkö siis kuvaamaan lukujesi avulla jotakin oikeasti järkevää?

JoinTuanJanohon [12.03.2008 20:39:08]

#

Kyllä. Lukusuoralla 0 sijaitsee paikassa 0. Sen sijaan lukutasossa on 0-suora, joka kulkee likimain 45 asteen kulmassa origon kautta. Sun kunta-aksioomat ovat real2d -luvun osajoukkona. Etköhän nyt tehnyt vähän hätiköityjä johtopäätöksiä, mutta ei sen väliä.

Eikä tuo jakolasku nyt ihan noinkaan mene, joskin se redusointi-hässäkkä pääsee oikeuksiinsa vasta complex2d:ssä.

Edit2: Eikä tuo lukutasokaan ole kovin kuvaava nimi, koska lukutasossa on 1/4-osaa positiivista, negatiivista, "jokutiivista" ja "muutiivista" suuntaa. Sen vuoksi complex2d:ssä on i:n lisäksi vielä j- ja k-oliotkin.

Tuohon viimeiseen voin sanoa, että algebran kirjat ovat pullollaan sovelluksia. Sinällään puhtailla luvuilla ei tee yhtään mitään. Ne heräävät eloon vasta lukuisissa algebran ja yleensä matematiikan sovelluksissa.

os [12.03.2008 20:58:46]

#

Tutustupa niihin aksioomiin vähän tarkemmin.

Wikipedia kirjoitti:

Existence of multiplicative inverses
For every a != 0 belonging to F, there exists an element a-1 in F, such that a * a-1 = 1.

Eli jokaisella kunnan alkiolla a pitää olla käänteisalkio a-1, jolle pätee a * a-1 = 1. Tämän perusteella siis, jos real2d-lukujen joukko on kunta, niin (3,3) ei ole tämän kunnan alkio tai se on ekvivalentti 0-alkion kanssa.

Wikipedia kirjoitti:

Closure of F under + and *
For all a, b belonging to F, both a + b and a * b belong to F

Eli jos a ja b ovat kunnan alkoita, niin myös c = a + b on kunnan alkio. Toisaalta esim (0,2)+(3,1) = (3,3), joten joko (0,2) ja (3,1) eivät ole kunnan alkiota, tai (0,2)+(3,1) = (0,0). Ensimmäisessä tapauksessa kunnassa ei ole yhtään alkiota, koska jokaiselle jokaiselle luvulle (a,b) on olemassa mielivaltainen määrä lukuja (c,d), jolle pätee (a,b)+(c,d) = (x,x). Jälkimmäisessä tapauksessa lukujärjestelmä ei toteuta vasta-alkoin yksikäsitteisyyttä, joka on välitön seuraus (voidaan todistaa) kunta-aksioomista.

real2d-systeemi ei siis ole kunta. Reaaliluvut ovat. real2d-luvut eivät siis ole reaalilukujen laajennus.

Edit: Tuo "nollasuora" on käytännössäkin aika vaarallinen puute lukujärjestelmässä.

Edit2:

JoinTuanJanohon kirjoitti:

Tuohon viimeiseen voin sanoa, että algebran kirjat ovat pullollaan sovelluksia. Sinällään puhtailla luvuilla ei tee yhtään mitään. Ne heräävät eloon vasta lukuisissa algebran ja yleensä matematiikan sovelluksissa.

Mitkä algebran kirjat? Voitko mainita jonkin kirjan, jossa käytetään tuollaisia lukujärestelmiä? Ja miksi? Onko niissä kvaternioin tai matriisein toteutettuhin lineaari- tai affiinikuvauksiin verrattuna mitään muuta "etua" kuin se, että olet keksinyt nuo itse?

Metabolix [12.03.2008 21:07:07]

#

Miten tuo jakolasku sitten sinusta toimii, jos ei noin? Itsesi niin kovasti arvostaman empiirisen tutkimuksen perusteella vastaukset ovat juuri täsmälleen tuollaisia.

Lukujärjestelmässäsi ei ole mitään vakavasti otettavaa, ennen kuin kokoat sille mielekkäät perusaksioomat — numeerinen C++-toteutus ei kelpaa aksioomiksi.

JoinTuanJanohon [12.03.2008 21:16:45]

#

Huoh. Eikö mene jakeluun, että se 0-suora kulkee sen origon kautta noin 45 asteen kulmassa. Kaikki real2d(x, x) -luvut ovat yhtä kuin 0. Wikipedia voi kirjoittaa, mitä huvittaa.

Muistaakseni jossain (yliopistotasoisessa) matematiikan kirjassa oli niin koominen todistus tästä ihmisen mieltämästä symboliikasta, että poltin kirjan seuraavalla juhannusroviolla. Sen ohessa poltin muutoin suurimman osan tyhmistä matematiikankirjoistani. Hyllyyni jäi vain muutama matematiikan historiaa käsittelevää teosta, pari käsikirjaa ja luonnollisesti Tammertekniikan kaavasto.

os [12.03.2008 21:26:50]

#

JoinTuanJanohon kirjoitti:

Huoh. Eikö mene jakeluun, että se 0-suora kulkee sen origon kautta noin 45 asteen kulmassa. Kaikki real2d(x, x) -luvut ovat yhtä kuin 0. Wikipedia voi kirjoittaa, mitä huvittaa.

Kuten juuri sanoin, se ei kerta kaikkiaan käy. Lukujen laskusäännöt eivät ole enään loogisia:

(1,1)+(2,3) = 0 + (2,3) = (2,3), mutta laskusääntöjen perusteella
(1,1)+(2,3) = (1+2,3+1) = (3,4) eli
(3,4) = (2,3)

mikä ei millään tavoin pidä paikkansa, eikä tuo sovellus noudata tällaista logiikkaa. Eli jos, (x,x) = 0, niin laskusäännöt pitää sovittaa siten, että tämä pitää myös pitää paikkansa. Tästä ei kuitenkaan seuraisi muuta kuin lisää ongelmia.

JoinTuanJanohon [12.03.2008 21:55:06]

#

Ai niin, unohdin myös sanoa, että algebra on itsessään pelkkä metodi, ja sen substanssit ovat mitä ovat. Esimerkiksi pienimmän neliösumman polynomisovitus on algebrallinen metodi, eikä se ota sinällään kantaa, mitä substanssia se pyörittelee.

Jos substanssi toimii, algebran metodi tuottaa mielekkäitä tuloksia. Jos substanssi ei toimi, ts. olio ei täytä ehtoja:

|e^(ai+bj+ck...)| = 1
ja
sin^2 x + cos^2 x = 1

niin silloin on melko turha odottaa algebran metodeilta mitään kovin mielekkäitä tuloksia.

Nuo kaksi ehtoa liittyvät olioiden rotaatioon eri dimensioissa. Olen siinä mielessä vähän vanha koira, että tuli tutkittua noita asioita melko kauan. Nyt on enemmän yhdentekevää, kiinnostaako jotakuta substanssien rotaatiot eri sfääreissä vai ei.

Noin niin kuin vihjeenä teille puolta nuoremmille voisi sanoa, että aivan kaikkea fysiikassa, matematiikassa ja kemiassa ei ole vielä kiveen hakattu. Vaatii myös tietynlaista mielenlaatua, että pystyy sietämään epäonnistumista ja umpikujia vaikka maailman ääriin. Se ei sovi kaikille. Sen vuoksi on lukiot, yliopistot, yms. opinahjot, jotka tarjoavat ehkä vähän turvallisemman ja vakaamman polun tulevaisuuteen.

Minä valitsin kaikkein vaikeimman polun, ja vasta nyt uurastus on alkanut realisoitumaan. Mene ja tiedä. Aika aikaansa kutakin, ja nyt veri vetää voimakkaasti tuonne päiväntasaajan tienoille. Viidakko, hyönteiset, meri, thai-nyrkkeily, ehkä pieni kala-/kasvis ravintola, yksinkertaisuus, kauas pois valosaasteesta ja urbaaneista lähiöistä. Ces't la vie.

os [12.03.2008 22:07:29]

#

JoinTuanJanohon kirjoitti:

Noin niin kuin vihjeenä teille puolta nuoremmille voisi sanoa, että aivan kaikkea fysiikassa, matematiikassa ja kemiassa ei ole vielä kiveen hakattu.

Ei tietenkään, mutta sen verran monta sataa vuotta (paitsi ehkä kemiassa) niitä on tahkottu, että kannattaa olla joku todella hyvää syy, ennen kuin alkaa kyseinalaistaa esimerkiksi matematiikan peruskäsitteitä.

Luvut, lukujärjestelmät, mallit, metodit ... ovat fysiikassa ja sovelletuissa tieteissä juuri niin hyödyllisiä ja arvokkaita, kuin niiden antamat tulokset (kuvaukset todellisuudesta). Vaikka Newtonin mekaniikan rajoitukset tunnetaan (tai siis, sen perusoletukset maailmasta ovat muiden teorioiden valossa "vääriä"), käytetään sitä silti sille sopivilla alueilla. Matematiikalla ei ole samanlaista suhdetta todellisuuteen, mutta siinä on olennaista, että mallit ovat sisäisesti ristiriidattomia ja mahdollisesti tarjoavat syvällisemmän näkökulman tai hyödyllisen laajennuksen johonkin olemassaoleviin käsitteisiin, tai ylipäätänsä jonkin järkevän systeemin jonkin asian kuvataamiseksi (esim. peliteoria).

JoinTuanJanohon [12.03.2008 22:23:28]

#

Niin, mitään ei ole kyseenalaistettu. Päinvastoin, ainut totuus on algebra. Se on kupla, jonka sisään se on käpertynyt. Piirrä hiirellä monitorille otos luonnosta. Algebra pukee sen kompaktiksi funktioksi.

Piirrä hiirellä monimutkaisempi otos luonnosta. Ellet rajoita algebran ulottuvuuksia, se pukee ilmiön jälleen lyhyeksi approksimaatioksi. Algebra on ihmeellistä, ja sen yhteys luontoon on hämmentävä. Miksi kaksi?

Jaska [12.03.2008 22:23:43]

#

JoinTuanJanohon kirjoitti:

Noin niin kuin vihjeenä teille puolta nuoremmille voisi sanoa, että aivan kaikkea fysiikassa, matematiikassa ja kemiassa ei ole vielä kiveen hakattu.

Ööh, mikä matematiikassa ei ole kiveen hakattu? Aksioomat ovat aika hyvin vakiintuneet käyttöön ja kaikki muu on todistettu niistä. Tietysti jos joku löytää ZFC:stä ristiriidan niin sitten matemaatikot ovat pulassa. Ristiriidan löytymiseen en kuitenkaan usko.

JoinTuanJanohon [12.03.2008 23:12:15]

#

Sitä ei ole kiveen hakattu, että algebra on metodi, ja sen substanssit ovat mitä ovat. Et voi todistaa pienemmällä aksioomakuplalla, että minä en olen suuremman aksioomakuplan aito osajoukko. Sen sijaan voit osoittaa suuremmalla aksioomakuplalla, että tämä pienempi sisälläni oleva aksioomakupla on minun aito osajoukkoni. Aksioomakupla, jolla on tämä ominaisuus, on tasan algebran aksioomakupla.

Asia on kuitenkin mielekkäämpi nähdä omin silmin. Piirrä hiirellä monitorillesi joukko pisteitä. Tee sen jälkeen BruteForce, joka kokeilee kaikki logiikat kuvata piirtämäsi pistejoukko kompaktiksi funktioksi.

Huomaat, että on vain yksi totuus, joka pistejoukon funktioksi pukee. Ei tarvitse enää pohtia, miksi algebran aksioomat ovat sellaisia kuin ovat. Vain se logiikka onnistuu kuvaamaan luontoa, olkoon se luonto sitten vaikka monitorillesi hatarasti hiirellä piirretty pistejoukko.

os [12.03.2008 23:25:49]

#

Käyttämäsi käsitteet eivät ole yleisesti tunnettuja tai määriteltyjä siten kuin niitä käytät, joten kukaan muu ei voi ymmärtää viestiäsi tai jokainen voi ymmärtää sen aivan miten haluaa.

Jos viestin käsitteet määrittelee tietyllä tavalla, niin olet varmaan oikeassa. Sellaisenaan viestissä ei ainakaan omasta mielestäni ole mitään järkeä.

ByteMan [12.03.2008 23:58:25]

#

ota vaikka tietokoneestasi valokuva, syötä se siihen bruteforce funktioosi, ja saat selville, millä funktiolla voit piirtää vastaavat pisteet vastaaviin kohtiin..
miten se muka kuvaa luontoa??

Jos kerta pystyt romuttamaan nykyisen matemaattisen ajattelumallin, niin mikset ole vielä julkistanut löytöäsi?

näin siis jos ymmärsin oikein selityksesi.

JoinTuanJanohon [12.03.2008 23:59:20]

#

Jaa, C-koodi (lyhyesti kirjoitettu ja läpivaluva) ei jätä sijaa tulkinnoille. Yhteen-, vähennys-, kerto- ja jakolaskut toimivat vain yhdellä logiikalla. Puhdas matemaattinen formalismi on melko kankea ja raskas kieli yksinkertaisuuden ja rekursion kuvaamiseen.

Oleellista on vain 2^n latinalaiset neliöt yhdistettynä kantavektoreiden tulosääntöihin yhdistettynä moniulotteisen lukusymmetrian 0:sta generoituvaan rekursioon.

Plaah. Ehkä sovellettu matematiikka ja C voisivat joskus tulevaisuudessa palaveerata merkintäkoukeroista. Tietokoneilla niitä asioita kuitenkin lopuksi lasketaan, joten nähtäväksi jää.

Edit: Ja mitä pitää romuttaa, missä, miksi ja koska? Ei mahdollisuudet nähdä asioita toisenlaisessa valossa/mittakaavassa mitään romuta. Voit uskoa asioihin, kuin piru raamattuun, mutta ikää myöten pantasi tulee löystymään. Kenties silloin näet romuttamisen sijasta mahdollisuuksia. Elämä on mahdollisuuksia. Verkko, jonka kaikki reitit johtavat samaan päätepisteeseen.

Käytäntö matematiikassa on niin ikään mahdollisuuksia. Työkaluja. Hienomekaanisilla työkaluilla et voi korjata esimerkiksi autoa, ja päinvastoin. Kumpaakaan ei tarvitse romuttaa, jos valitset kahdesta pakista sen oikean.

Sami [13.03.2008 00:21:47]

#

Monoidi on joukko, jossa on määritelty binäärioperaatio * (käytän nyt symbolina tähteä, joka voi tarkoittaa mitä tahansa operaatiota, esimerkiksi perinteistä yhteen- tai kertolaskua) ja joka toteuttaa seuraavat aksioomat (seuraavissa M on joukko ja kaikki pienin kirjaimin kirjoitetut muuttujat ovat M:n alkioita):
1) assosiatiivisuus ((a * b) * c = a * (b * c)), kaikilla a, b, c
2) sisältää neutraalialkion u siten, että x * u = u * x = x, kaikilla x
3) joukko on suljettu (kaikilla x ja y, myös x * y kuuluu joukkoon M).

Esimerkiksi ryhmä, rengas ja kunta toteuttavat nämä samat aksioomat ja lisäksi muita aksioomia, eli ne ovat monoidien osajoukko (jokainen kunta on myös monoidi).


Näin pienen johdannon jatkeeksi osoitetaan neutraalialkion yksikäsitteisyys:
Oletetaan kaksi erillistä neutraalialkiota u ja v, jolloin pitäisi olla:
x * u = u * x = x ja
x * v = v * x = x

Lasketaan nyt mitä on v * u:
v * u = v (yhtälöstä x * u = x) ja
v * u = u (yhtälöstä v * x = x)

=> v = u, eli neutraalialkio on yksikäsitteinen. M.O.T.


Koska neutraalialkio on yksikäsitteinen ja jos real2d olisi kunta, niin kuten os jo tavallaan totesikin: "nollasuoraa" ei voi olla olemassa, ellei se sitten satu olemaan yksi alkio.

os [13.03.2008 00:56:04]

#

Sami kirjoitti:

Koska neutraalialkio on yksikäsitteinen ja jos real2d olisi kunta, niin kuten os jo tavallaan totesikin: "nollasuoraa" ei voi olla olemassa, ellei se sitten satu olemaan yksi alkio.

Joukko, jossa laskutoimitukset on määritelty mainitulla tavalla ei voi olla kunta, koska jokaisella kunnan alkiolla on oltava yksikäsitteinen vasta-alkio. real2d-joukossa kuitenkin:

(1,2) + (2,1) = (3,3)
(1,2) + (3,2) = (4,4)

jos sekä (3,3) = (4,4) = 0, niin luvulla (1,2) olisi kaksi erillistä vasta-alkiota, (2,1) ja (3,2).

ks. http://www.wiu.edu/users/kms117/Math-435-SS04/Field-axioms.pdf

JoinTuanJanohon [13.03.2008 00:57:37]

#

No huh. Että oikein M.O.T.

Osoita seuraavaksi, että pallon pinta ei ole pallon aito osajoukko. Tai että tason läpi tason suuntaisesti kulkeva suora ei ole tason aito osajoukko.

Perustatko suuren ja mahtavan matemaattisen todistuksesi nyt todella veitsenterävään matemaattiseen logiikkaasi, että:

x * u = u * x = x ?

Entäs, jos x on esimerkiksi 2, ja u on 3, niin tyhmempikin huomaa heti, ettei:

2 * 3 = 3 * 2 = 2 ?

voi mitenkään pitää paikkaansa? Voit esittää noita "todistuksiasi" vaikka maailman ääriin. Lähinnä huvittavaa ja koomista. Sovellettun matematiikan pariin tuollaiset eväät eivät ehkä aivan vielä riitä, mutta oppia ikä kaikki.

os [13.03.2008 01:07:14]

#

JoinTuanJanohon kirjoitti:

Entäs, jos x on esimerkiksi 2, ja u on 3, niin tyhmempikin huomaa heti, ettei:

2 * 3 = 3 * 2 = 2 ?

Etkö tosiaan ymmärrä edes yksinkertaista formalismia? Kyseessä oli *-operaation neutraalialkio, monoidin tapauksessa ainoa alkio, jolle väite pitää paikkansa (+-laskussa 0, kertolaskussa 1)

2 * 3 != 2, joten 3 ei ole kertolaskun neutraalialkio.
2 * 1 == 2, joten 1 on kertolaskun neutraalialkio.

Ei ole kovin vaikea juttu.

JoinTuanJanohon [13.03.2008 01:25:21]

#

Niinpä, vasta-alkioita on puolet enemmän. Samalla logiikalla myös syitä seuraukselle on puolet enemmän. Ts. jokaiselle complex2d -oliolle löytyy neljä neliöjuurta.

Tästä seuraa, että funktio-approksimaatiot voivat kuvata syiden seurauksia toisessa potenssissa. 1D-algebra, siis se koulualgebra, pystyy kuvaamaan epälineaarisia syitä vain lineaarisina seurauksina.

Tällainen soveltaminen menee kuitenkin jo niin spesiaaliseksi, ettei asian ruotiminen ole enää tähdellistä tässä yhteydessä. Luulisin ainakin niin.

Edit: En ole tarvinnut tähän päivään mennessä neutraalialkioitasi, enkä luultavasti tule niitä tarvitsemaan. Onhan se varmaan tähdellistä ja hienoa laskea neutraalialkioilla. Kenties jokin lukion matematiikkaan liittyvä nippelitieto? Lasket sitten pyydetyn laskun neutraalialkioillasi, josta opettaja pläjäyttää pränttiin heti 2 pistettä, ei huono.

Muistaakseni matematiikan historiassa ei ole halaistua sanaa neutraalialkioista. Sen sijaan historia esittää seikkaperäisesti Zenonista Cantoriin -herrojen konkreettiset työt ja oivallukset. On sitten vähän makuasia, perehtyykö neutraalialkioihin, vaiko esimerkiksi Gaussin, Newtonin, Arkhimedeksen ynnä muiden töihin. Plaah.

os [13.03.2008 02:24:20]

#

JoinTuanJanohon kirjoitti:

En ole tarvinnut tähän päivään mennessä neutraalialkioitasi, enkä luultavasti tule niitä tarvitsemaan. Onhan se varmaan tähdellistä ja hienoa laskea neutraalialkioilla. Kenties jokin lukion matematiikkaan liittyvä nippelitieto?

http://fi.wikipedia.org/wiki/Neutraalialkio

Neutraalialkioita ovat esimerkiksi 0 ja 1, niihin varmaan olet tutustunut.

JoinTuanJanohon kirjoitti:

Niinpä, vasta-alkioita on puolet enemmän.

Vasta-alkioita on tuolla logiikalla jokaiselle real2d-luvulle ääretön määrä, kuten keksimistäsi laskukaavoista on aivan selvästi nähtävissä.

JoinTuanJanohon kirjoitti:

Samalla logiikalla myös syitä seuraukselle on puolet enemmän. Ts. jokaiselle complex2d -oliolle löytyy neljä neliöjuurta.

Tästä seuraa, että funktio-approksimaatiot voivat kuvata syiden seurauksia toisessa potenssissa. 1D-algebra, siis se koulualgebra, pystyy kuvaamaan epälineaarisia syitä vain lineaarisina seurauksina.

Tällainen soveltaminen menee kuitenkin jo niin spesiaaliseksi, ettei asian ruotiminen ole enää tähdellistä tässä yhteydessä. Luulisin ainakin niin.

Oletko nyt missään määrin tosissaan vai kirjoitteletko vaan vaikean kuuloisia ilmaisuja peräkkäin, jotta tätä joku tätä ketjua lukeva voisi kuvitella, että olet edelleen kärryillä? Esittämistäsi jutuista ei numeromystiikkaa lukuunottamatta voi löytää juuri mitään oikeaa sisältöä.

JoinTuanJanohon kirjoitti:

Muistaakseni matematiikan historiassa ei ole halaistua sanaa neutraalialkioista. Sen sijaan historia esittää seikkaperäisesti Zenonista Cantoriin -herrojen konkreettiset työt ja oivallukset. On sitten vähän makuasia, perehtyykö neutraalialkioihin, vaiko esimerkiksi Gaussin, Newtonin, Arkhimedeksen ynnä muiden töihin. Plaah.

Voisit perehtyä ainakin johonkin matematiikkan lukemalla aihetta käsittelevän oppikirjan.

JoinTuanJanohon [13.03.2008 03:04:01]

#

Et sitten enää pystynyt sanomaan mitään uutta, vaan aloit kinaamaan. Tyhjyys on juuri tuota, että kopioi lauseet, ja yrittää esittää joka virkkeelle jonkinlaisen vasta-argumentin.

Varsinkin sovelletun matematiikan osaamattomuutesi paistaa aika voimakkaasti. Minuakin otti joskus pannuun, kun en ymmärtänyt lineaarisia yhtälöryhmiä, polynomiapproksimaatioita, sarjoja, DFT/IDFT, FEM, jne. sovellettua matematiikkaa.

Sinulle pitäisi siis vääntää asiat rautalangasta, mutta ei hätä. Sen vuoksihan tämän "saman pöydän ääreen" kokoonnutaan, jotta asioihin ja probleemiin saisi selkeän rautalankamalliotteen.

Voisi tuota kaiketi ajan kanssa kertoa syvällisemmin vaikkapa ensin polynomiapproksimaatiosta. Ahaa-elämys, kun sumea - vaikkapa 16 tuhannen complex2d -pistejoukko pukeutuu kompaktiksi polynomiksi.

Kai se voisi olla lyhyt opas? En tiedä. Ehkä sovellettu matematiikka on niin spesifinen ja kapea sektori, ettei se herätä laajempaa kiinnostusta. Mene ja tiedä.

os kirjoitti:

Vasta-alkioita on tuolla logiikalla jokaiselle real2d-luvulle ääretön määrä, kuten keksimistäsi laskukaavoista on aivan selvästi nähtävissä.

Tähän on pakko vielä kommentoida. En ole käsittääkseni keksinyt yhtään mitään. Edes puolella A4:lla toimiva rekursiivinen ja ihmisen mittapuulla mitattuna käsittämätön BruteForce shakki-algoritmi ei ole mikään keksintö, vaan raakaa logiikkaa.

Musta löytää muunnelman, jossa uhrataan kaikki, ja viimeinen ratsu pläjäyttää matin uhaten samalla suurinta osaa valkean upseereista. "Numerojen taidetta" - kirjoitin jossain yhteydessä. Minulle numerot ovat oikeasti taidetta.

Näen mielessäni silmiä hivelevän hehkuvan 3D-fraktaalirakenteen, joka alati hennosti elää neljännen ulottuvuuden funktiona. Vain ja ainoastaan se visio. Harmonia ja kauneus, kaikki muu on minulle yhdentekevää.

os [13.03.2008 11:17:56]

#

JoinTuanJanohon kirjoitti:

Varsinkin sovelletun matematiikan osaamattomuutesi paistaa aika voimakkaasti. Minuakin otti joskus pannuun, kun en ymmärtänyt lineaarisia yhtälöryhmiä, polynomiapproksimaatioita, sarjoja, DFT/IDFT, FEM, jne. sovellettua matematiikkaa.

Sinulle pitäisi siis vääntää asiat rautalangasta, mutta ei hätä. Sen vuoksihan tämän "saman pöydän ääreen" kokoonnutaan, jotta asioihin ja probleemiin saisi selkeän rautalankamalliotteen.

Matematiikan osaamisesi näyttää olevan sen verran hataralla pohjalla, että "ymmärryksesi" noista sovelletun matematiikan perusteista tuskin on muuta kuin pätkiä "moniulotteisella algebralla" elävöitettyä C-koodia, jolla olet piirrellyt kauniita kuvia näytölle.

Itseäni ottaa päähän lähinnä se, että täysin pintapuolisen osaamisesi pohjalta yrität vääntää kenellekään rautalangasta yhtään mitään.

JoinTuanJanohon [13.03.2008 15:53:13]

#

Ihan asiallista profiilia luot omalta osaltasi tälle foorumille. Kertoo jotain sinunlaisista. Toisaalta minullekaan ei nyt ole niin kauhean tärkeää, minkälaista hiippakuntaa haluat ympärillesi rakentaa. Enemmän tosin ajattelen muiden kannalta. Tuskinpa ihan kaikki tuollaista uhoa allekirjoittavat, joten olet melko yksin mahtailusi kanssa.

Metabolix [13.03.2008 16:24:51]

#

JoinTuanJanohon kirjoitti:

Tuskinpa ihan kaikki tuollaista uhoa allekirjoittavat, joten olet melko yksin mahtailusi kanssa.

Luulenpa päinvastoin, että olet itse aika yksinäsi nyt. Nykymaailmassa ei vain kukaan ota vakavasti ilmeisesti kouluttamatonta henkilöä, joka väittää brute force -ohjelman avulla selvittäneensä ainoan toimivan lukujärjestelmän laskusäännöt, joita kukaan muu ei ole vielä keksinyt. Matematiikan juuret ovat luonnontieteistä syvimmällä, siinä jos jossain asioita on kokeiltu ja todettu toimiviksi tai toimimattomiksi.

Jos haluat, että joku ottaa selityksesi edes vähän todesta, saisit esitellä selkeässä muodossa lukujesi laskusäännöt ja olennaiset määritelmät — kuten mitä nämä erilaiset nollat oikein ovat, jos niiden ei ole tarkoituskaan olla yhteenlaskun neutraalialkioita. (Jos et vieläkään ymmärrä sanaa neutraalialkio, on korkea aika ottaa siitä selvää. Se ei ole kovin kummoista salatiedettä vaan ihan lukujärjestelmän perusasia, ja jos et sitä ymmärrä, et voi todellakaan väittää kehittäneesi yhtäkään erityisen oikeaa laskusääntöjä.) Voisit myös selostaa, millä perusteella nuo laskusääntösi ovat oikeat, mikä niistä tekee oikeampia kuin muut laskusäännöt ja miten ihmeessä olet todennut ne oikeiksi brute force -ohjelmalla.

tkarkkainen [13.03.2008 16:31:42]

#

Metabolix kirjoitti:

JoinTuanJanohon kirjoitti:

Tuskinpa ihan kaikki tuollaista uhoa allekirjoittavat, joten olet melko yksin mahtailusi kanssa.

Luulenpa päinvastoin, että olet itse aika yksinäsi nyt.

Olen samaa mieltä Metabolixin luulon kanssa.

JoinTuanJanohon [13.03.2008 17:29:23]

#

Lopeta sinäkin tuo turha lässyttäminen. Tiedät itsekin, että alkeisoperaatioilla voi sarjakehitelmien avulla osoittaa, että jollakin algebrallisella oliolla on voimassa rotaatioehdot:

|e^(ai+bj+ck...)| = 1
ja
sin^2 x + cos^2 x = 1

Mitä muuta tarvitset? Tutki ja kokeile itse mitä tahansa muita kantavektorivirityksiä. Joko nuo ehdot särkyvät, tai edellinen aksioomakupla ei ole enää uuden aksioomakuplan aitona osajoukkona.

Mitä tulee noihin BruteForceihin, ne ovat tietenkin optimoituja. En puhu mielelläni älystä, mutta sanotaan varovasti, että suunnattu MC-tekoäly. Treenaa itse, ei minullekaan kukaan tuonut valmiita ratkaisuja hopealautasella. Tai jatka vain muuten valitsemalasi linjalla. Ei se minulle kuulu.

Olet varmaan jo kokeilutkin, ja todennut, että tuo rotaatio on voimassa. Ehkä kokeilit jo myös DFT/IDFT muunnosta, ja totesit sen validiksi. Tai jotain muuta, kommutatiivisuutta, jne.

Ottaako pannuun, kun käytäntö toimii? Ottaako pannuun nähdä algebrallisen substanssin rotaatioehdot:

|e^(ai+bj+ck...)| = 1
ja
sin^2 x + cos^2 x = 1

Ottaako pannuun, kun luulet itse olevasi melkein maailman paras koodaaja, mutta joudut huomaaman ja kohtaamaan kokemattomuutesi. Se on luonnollista. Niin minäkin ajattelin sinun ikäisenä, että olen lyömätön koodaaja, kun sain ensimmäisen jätkän-shakin toimimaan 64:ssa assemblerilla, eikä sille pärjännyt.

Mutta sitten työtä, työtä ja työtä. Kokemuksen ja iän karttuessa luulot itsestä alkoivat karisemaan. Minua ei ole koskaan kiinnostanut matematiikassa teorianpaska, jahkailu ja jaarittelu.

Sen sijaan käytäntö on ollut aina kaikki kaikessa. Niinpä 0/0=1, koska x^0=1. Voit jaaritella sille jonkin muun lukuteoreettisesti johdonmukaisemman arvon, mutta muun muassa käytännön polynomisovitus antaa oikean tuloksen vain silloin, kun x^0=1, vaikka x olisikin tasan 0.

Lopetan omalta osaltani tämän keskustelun tähän. Ei se nyt oikein sovi enää minun ikärakenteelleni kinata joidenkin lukiota ja peruskoulua käyvien lasten kanssa jostain sovelletusta matematiikasta, jotka ovat kokemuksensa ja rutiininsa kanssa vasta lähtösuoralla. Menestystä kirjoituksiin.

tkarkkainen [13.03.2008 18:30:53]

#

Nyt kun tuolle ikälinjalle piti kerta lähteä, niin paljonkos itselläsi on ikää?

Huomasit varmaan myös, että varsin moni keskusteluun osallistuneista on jo lukionsa käynyt.

Lebe80 [13.03.2008 19:05:46]

#

Mä oon 28v ja mua ei kiinnosta tää aihe paskan vertaa. Eikä varsinkaan teidän näinkin tärkeästä asiasta kinastelu. Koodatkaa välillä jotain.

Päärynämies [13.03.2008 19:58:13]

#

Pakkohan tähän on ottaa osaa, vaikka ottaakin päähän koko ketju. Täytyy vain toivoa kaikkien kannalta, että tämä kaveri ei tosissaan ole.

JoinTuanJanohon kirjoitti:

Lopetan omalta osaltani tämän keskustelun tähän. Ei se nyt oikein sovi enää minun ikärakenteelleni kinata joidenkin lukiota ja peruskoulua käyvien lasten kanssa jostain sovelletusta matematiikasta, jotka ovat kokemuksensa ja rutiininsa kanssa vasta lähtösuoralla. Menestystä kirjoituksiin.

Jotenkin niin perinteinen keskustelun päättäminen "En viitsi keskustella enää teidän kanssane, kun ette tajua minua ja menen jo melkeimpä henkilökohtaisuuksiin". En tiedä onko kukaan vielä suoraan sanonnut, että armotonta paskaa taitaa tuo teoria olla. Hienoja sanoja, ties mitä algebrallisia substansseja, mutta huonolla pohjalla lepää.

Joo. Täysin turha viesti tämäkin. Vois koittaa koodailla välillä jotakin.

Triton [13.03.2008 20:09:11]

#

lainaus:

Lopetan omalta osaltani tämän keskustelun tähän. Ei se nyt oikein sovi enää minun ikärakenteelleni kinata joidenkin lukiota ja peruskoulua käyvien lasten kanssa jostain sovelletusta matematiikasta, jotka ovat kokemuksensa ja rutiininsa kanssa vasta lähtösuoralla. Menestystä kirjoituksiin.

Mä en ymmärrä tästä keskustelusta pask*****, mut sen mä tiedän (vaikka olen elämänkokemukseltani vain vajaa 15 -vuotias), että iällä ei ole mitään merkitystä vuosissa, jos ei ole samaa henkisellä tasolla...

koo [13.03.2008 22:09:22]

#

Ymmärrän kyllä, että moniakin ärsyttää loppumattomasti jankkaava keskustelu. Tässä on nyt kuitenkin käynyt niin, että olemme matkan varrella kuulleet yhden ihmisen esittämänä ehdottomia totuuksia, joille ei ole eikä tule mitään perusteluita, sekä henkilöihin kohdistuvaa alentavaa suhtautumista ja nimittelyä. Sellainen saattaa vetää mukaan sellaisiakin, jotka eivät aiheeseen niin muuten viitsisikään vaivautua.

Viimeinen kierros on väännetty lähinnä henkilökohtaisena pakkomielteenä pidettävästä numeromystisestä sumutuksesta, jonka ainoa konkreettinen ilmentymä on pätkä aloittelijamaista C++-koodia.

Taikka voihan se ollakin seuraava suuri totuus algebran alalla - paha mennä arvioimaan, kun ei muutamiin oleellisiinkaan kysymyksiin ole saatu tolkullisia vastauksia. Aihepiiristä perillä olevat ovat osoittaneet kiistattoman ristiriidan systeemistä, jonka pitäisi kuitenkin majesteetillisen julistuksen mukaan toimia, koska näiden kaavojen antamat tulokset täsmäävät. Sillä ei ole väliä, millaiselle systeemille (mitä esimerkiksi sarjakehitelmä olettaa neutraali- ja vasta-alkioista) ne kaavat on alun perin johdettu, sillä ne perustuvat kaavakirjaan. Ja muutenkin koko jutun ymmärtäminen nyt vain vaatisi samanlaista vuosikymmenten mittaista henkistä itsevalaistumista.

Noh, toivottavasti itse kukin keskustelija osaa ottaa tästä opikseen.

JoinTuanJanohon [13.03.2008 22:39:52]

#

int main(void)
{
   real2d a(1.0/2.0, 1.0/3.0);
   real2d b(1.0/5.0, 1.0/7.0);
   real2d c(1.0/11.0, 1.0/13.0);
   real2d d(1.0/17.0, 1.0/19.0);

   complex2d x(a, b, c, d);
   print(sin(x)*sin(x)+cos(x)*cos(x));

   complex2d e(2.71828182845904523536);
   x=complex2d(real2d(0), a, b, c);
   complex2d f=pow(e, x);
   print(f);

   printf("\n\n");
   printf("%0.21f\n", (double)(abs(f)));

   return 0;
}

ByteMan [13.03.2008 23:06:45]

#

ei oo totta.. mä kysyin että mitä lukion pitkällä matikalla tekee, ja tänne käynnisty joku ihme sota.. :D

mut ihan mielenkiinnosta, kun JoinTuanJanohon sanoit jotain "neljännen ulottuvuuden funktiosta", nii haluaisitko mitenkään valistaa minua tästä neljännestä ulottuvuudesta? niinku mitä/mikö se on?

JoinTuanJanohon [14.03.2008 13:38:16]

#

No eipä siinä kaiketi paljon valaisemista ole. Esimerkiksi complex2d -oliossa on neljä oliota, neljä ulottuvuutta. Kompleksiluvussa on kaksi oliota, kaksi ulottuvuutta. Moniulotteinen algebra (jota nimeä Hamilton olisi halunnut noille oliolle käyttää) generoi puolestaan ensin tuolle kompleksiluvulle vastinolion, ja saadulle olioparille jälleen vastinolion, jne.

Ja kun niillä käytäntö toimi, funktioapproksimaatiot, tosin sillä rajoituksella, että approksimaatiot sallivat epälineaarisille syille vain lineaarisen seurauksen, niin kehitin ohjelmaa vähän enemmän, ja käskin sen ruveta etsimään algebran sarjakehitelmien kanssa sellaista yhteensopivaa pläjäystä, joka voisi vääntää approksimaatioissa epälineaariset syyt edes paraabeliksi.

Ohjelma tulosti siinä real2d- ja complex2d-oliossa olevat alkeisoperaatiot, ja lisäksi väitti, että kaikki muut kombinaatiot johtaisivat lehmän perseeseen ja ristiriitaan algebran kanssa. Tuosta complex2d:stä on taas suhteellisen vähällä vaivalla nähtävissä se algebran sielu alkeisoperaatioiden algoritmin muodossa, jolloin 2D:tä seuraa 4D, 8D, jne. Ja sitten noillekin voi edelleen generoida moniulotteisia vastinolioita vaikka maailman ääriin. Harmonia ja ristiriidattomuus säilyy, jos niitä aksioomakuplia viitsii katsoa sortteeratussa järjestyksessä suurimmasta pienimpään, eikä päinvastoin, eli perustaa kaiken kuin piru raamattuun, ja katsoa asioita ihmismielen ahtaan 1D-algebran symboliikan varjossa.

Vaikka ihmistä pidetään viisaana, se on silti pohjimmiltaan aika ahdasmielinen ja kapeakatseinen otus. Ei se pysty pyörittelemään tehokkaasti esimerkiksi kantavektoreita, ja tutkimaan samalla niiden vaikutusta sarjoihin, symmetriaan, ristiriidattomuuteen ja erilaisiin rotaatioehtoihin, jotka sinällään ovatkin absoluuttisia algebrallisia totuuksia. Että voi sitä ohjelmoida tuollaistakin, simuloitu matematiikkamies tai paremminkin matematiikkakone, joka murjoo ja ravistelee numeroita niin voimaperäisesti, että totuus lopulta pöydälle tippuu, jos on ollakseen.

Ja sekin on ihmiseltä helppoa sitten itseriittoisesti tyrmätä kaikki ja nähdä mahdollisuuksien sijasta enemmän uskontoon verrattavissa olevia totuuksia fysiikassa, kemiassa, matematiikassa ja yleensä koko maailmankatsomuksessaan. Mutta ei se minulle kuulu eikä minua vaivaa. Tuon mainin jätin vähän tarkoituksella hihaan, koska tiesin tulevasta älämölöstä. On siinä itsellenikin vielä ihmeteltävää ja tutkittavaa koko loppuelämäksi. Vain kone voi löytää tuollaisia syy-yhteyksiä, ihminen ei.

JoinTuanJanohon [20.03.2008 14:38:58]

#

koo kirjoitti:

...jonka ainoa konkreettinen ilmentymä on pätkä aloittelijamaista C++-koodia.

Aika läheltäkin on joutunut seuraamaan, miten C++ lopulta kaatuu omaan mahdottomuuteensa, kun niitä virtuaali-funktioita, valmiskirjastoja, yms. ruvetaan oikein urakalla soveltamaan.

Matemaattisten olioiden pyörittelyssä C++ on korvaamaton työkalu, ja itse kirjoitan ne aina C++:lla. Sen oheen on helppo kirjoittaa varovasti ensin vaikka kiinteänpilkun normalisoitu pläjäys, jota sitten alkaa optimoimaan varsinaiseen 5 sentin prosessoriin.

Noiden sinun argumenttien yleisvalossa olettaisin, että olet melko noviisi vielä koodaajana, mutta elämä on. Toisaalta, vaikka olen ollut vasta muutaman vuosikymmenen C:n ja assemblerin puikoissa, aina vaan oppii lisää (minua kiinnostavalta) kapealta sovelletun matematiikan sektorilta.

(Näyttää jo olevan kuopattu keskustelu, mutta sanotaan silti. Ei se maailma siitä kaadu.)

Metabolix [20.03.2008 22:00:29]

#

JoinTuanJanohon kirjoitti:

koo kirjoitti:

...jonka ainoa konkreettinen ilmentymä on pätkä aloittelijamaista C++-koodia.

Aika läheltäkin on joutunut seuraamaan, miten C++ lopulta kaatuu omaan mahdottomuuteensa, kun niitä virtuaali-funktioita, valmiskirjastoja, yms. ruvetaan oikein urakalla soveltamaan.

Luuletko sitten, että abstraktit rajapinnat tekevät ohjelmasta muiden silmissä hienomman? Toki yksinkertaisiin ohjelmiin voi käyttää yksinkertaista koodia, ei se ole aloittelijamaista. Omasta koodistasi on kuitenkin osoitettavissa monenlaisia puutteita. Miksi esimerkiksi olet määritellyt erikseen int- ja lreal-konstruktorit ja miksi neljän jäsenen konstruktorista on vain int-versio?

Toinen erittäin olennainen kysymys on, miksi ihmeessä ratkaiset numeerisesti yhtälöryhmän, jolle saa alle minuutissa paperilla symbolisen ratkaisun, jonka os jo aiemmin mainitsi. Tämän voisit itsekin todeta sijoittamalla lreal-tyypiksi jonkin yksinkertaiseen symboliseen laskentaan kykenevän luokan. Myös neliöjuuri ratkeaa paperilla pikaisesti (kaikki neljä juurta), siihenkään ei tarvita numeerisia menetelmiä. Enempää en jaksanut edes katsella, eivät ne muutkaan sen kummempia ole.

JoinTuanJanohon [20.03.2008 22:52:02]

#

Oho, se sinun numeerinen menetelmäsi tuon jakolaskun ratkaisulle ei oikein taida toimia, koska neljän yhtälöryhmän lävistäjässä jokainen alkio on jotain nollasta poikkeavaa.

Toisekseen neljän int-muodostinta (kantavektorimuodostinta) tarvitaan vasta, vain ja ainoastaan kompleksiolion kertolaskussa. Minulle on aivan sama, vaikka heivaat ne koodit männikköön. Niillä sarjoilla ja iteratiivisilla menetelmillä oli taas tarkoitus enemmän painottaa, että tietyt hiippakunta-aksioomat voimassa ovat, jne, jne.

Minulle sinä edustat asiantuntijoidesi kanssa lähinnä enää jotain pienempää hiippakuntaa. Minun mielestä taso on laskenut voimakkaasti, ja se on ikävää. Toivottavasti se on vain minun yksipuolinen näkemys vähän vanhemmasta perspektiivistä katsottuna.

Jackal von ÖRF [21.03.2008 01:12:57]

#

JoinTuanJanohon kirjoitti:

Ihmisellä kantavektoreiden ja numeroiden pyörittely on kuitenkin rajallista, ja suurin haaste oli ohjelmoida niin tehokas BruteForce (n. 12-14 vuotta), joka nuo harmoniaan johtavat kantavektoreiden tulosäännöt pystyi ratkaisemaan. Ja koska lähes äärettömästä sääntökombinaatioiden joukosta löytyy vain ja ainoastaan yksi vaihtoehto, joka johtaa ristiriidattomuuteen, niin se on algebran sielu.

JoinTuanJanohon kirjoitti:

Ohjelma tulosti siinä real2d- ja complex2d-oliossa olevat alkeisoperaatiot, ja lisäksi väitti, että kaikki muut kombinaatiot johtaisivat lehmän perseeseen ja ristiriitaan algebran kanssa.

JoinTuanJanohon kirjoitti:

Että voi sitä ohjelmoida tuollaistakin, simuloitu matematiikkamies tai paremminkin matematiikkakone, joka murjoo ja ravistelee numeroita niin voimaperäisesti, että totuus lopulta pöydälle tippuu, jos on ollakseen.

Ovatko perustelut teoriallesi siis, että koska jokin ohjelma niin väittää, niiden on pakko olla totta?

Minä väitän että kuu on juustoa. Tämä Scala-ohjelma on kanssani samaa mieltä, joten väittämä pitää paikkansa.

object Totuus extends Application {
  println("Kuu on juustoa.")
}

JoinTuanJanohon kirjoitti:

Sen ohessa poltin muutoin suurimman osan tyhmistä matematiikankirjoistani.

Harmi.


(Tämä keskustelu alkaa käydä absurdiksi.)

Blaze [21.03.2008 01:50:37]

#

Jackal von ÖRF kirjoitti:

Minä väitän että kuu on juustoa.

Camembertiä vai Gorgonzolaa?

JoinTuanJanohon [21.03.2008 02:07:14]

#

Voi voi. Ihmisen kyky hallita asioita ja tutkia samalla niiden syy-seurauksia johonkin harmoniaan, ristiriidattomuuteen, rotaatioehtoihin, hiippakunta-aksiomeihin, yms. on rajallista.

Ei tietokone sinällään mitään väitä, mutta ohjelma, joka toteaa jonkin asian olemassaolon tai ei, sen pohjalta voi tehdä tuon mainin, ja nähdä itsekin se, minkä ratkaisuun sinun kapasiteettisi ei riittänyt, mutta tietokoneen kapasiteetit riittivät, jos vain ensin saat sen ajattelemaan keskivertoa vaikeampaa syy-seuraus verkkoa.

Aika tyhjää on tuo sinunkin juusto-kommentointisi. Aloita vaikka Newtonin prosessista. Vertailun vuoksi itse tutkin sitä kaksi vuotta putkeen. Näköelimen mallinnuksessa vierähti myös muutama vuosi. Tämän asian ratkeaminen vaati vuosikymmenien työn.

Tuo maailmasi on aika pieni, mutta niin sen pitää ollakin. Jos jonnekin sovelletun matematiikan puolelle päädyt ilmiöitä mallintamaan, saatat hyvinkin sitten vähän vanhempana palata tähän ketjuun. Koomisinta siinä olisi se, että sinulla olisi oikeasti monisyinen ilmiö syy-seurauksineen, josta sinun pitäisi saada aikaan analyyttinen funktio. Ehkä, ehkä ei.

Henkilökohtaisesti voin sanoa, että sovellettu matematiikka nimenomaan C:llä ja C++:lla (lopulliset sovellukset toisinaan sulautettuihin järjestelmiin assemblerilla) on todella haastavaa. No joo, ei minunkaan kannata vatkata tätä keskustelua tämän enempää. Toivottavasti löydät koulutustasi vastaavaa kesätyötä tuolla juustoesimerkilläsi.

JoinTuanJanohon [21.03.2008 04:34:43]

#

Ja ennen kuin rupeat mutisemaan, että lävistäjä ei ole asettunut, kun teet jakolaskun real2d(0.0, x:llä), niin latinalaisessa 2^n neliössä on itse asiasiassa 2^n lävistäjää, joista joku on aina asettunut, mikäli jakaja vain on erisuuri kuin 0. (Muutoinhan yhtälöryhmälle ei olisi ratkaisua.)

Mutta tämän varmaan jo tiesitkin 2^n latinalaisista neliöistä ja yleensä Gaussin lineaarisesta yhtälöryhmänratkaisu-algoritmista. Mutta joo, töitä tuli väännettyä tähän hetkeen saakka, ja nyt ajattelin lähteä viettämään noita vapaapäiviä, vaikka työt otankin mukaan - läppärillä.

Jackal von ÖRF [21.03.2008 14:31:28]

#

koo kirjoitti:

Tässä on nyt kuitenkin käynyt niin, että olemme matkan varrella kuulleet yhden ihmisen esittämänä ehdottomia totuuksia, joille ei ole eikä tule mitään perusteluita, sekä henkilöihin kohdistuvaa alentavaa suhtautumista ja nimittelyä. Sellainen saattaa vetää mukaan sellaisiakin, jotka eivät aiheeseen niin muuten viitsisikään vaivautua.

JoinTuanJanohon kirjoitti:

Toivottavasti löydät koulutustasi vastaavaa kesätyötä tuolla juustoesimerkilläsi.

Näin se nähdään, että kun taidot eivät riitä matemaattisen todistuksen tekemiseen, niin sitten aletaan mollaamaan toisia (tietämättä mitään vastapuolen koulutustasosta ja työstä). "Minäpäs tiedän, mutta te ette tiedä, lälläslää" -tekniikka toimii ehkä esikoulussa, mutta ei täällä.

Tässä vielä äskeisen juustoesimerkin pointti täsmällisesti ilmaistuna. Niistä polttamistasi matematiikankirjoista löytynee enemmän tietoa todistuksessa käytetystä menetelmästä:


Oletus: A on tosi
Väite: Tietokoneohjelmat eivät ole aina oikeassa.
Todistus:

Tehdään vastaoletus: Tietokoneohjelmat ovat aina oikeassa.

Rakennetaan tietokoneohjelma, joka tulostaa tekstin "A on epätosi"
=> vastaoletus johtaa ristiriitaan oletuksen "A on tosi" kanssa
=> vastaoletus on epätosi
=> väite on tosi
M.O.T.


Empiirinen tutkimus ei todista mitään, vaan lopulta kaavat pitää todistaa aukottoman päättelyketjun avulla. Tietokoneella ei ole edes mahdollista kokeellisesti osoittaa, että n + 1 > n pätee kaikille luonnollisten lukujen alkioille n. Tietokoneen muisti loppuu kesken kauan ennen kuin kaikki luonnolliset luvut on kokeiltu (tai jos käytetään kielen primitiivityyppejä, niin lukuavaruus pyörähtää ennen pitkää ympäri), puhumattakaan siihen kuluvasta ajasta. Mutta matemaatikko todistaa kyseisen lauseen aukottomasti muutamassa minuutissa kynällä ja paperilla.

Jos se ei vielä tullut selväksi, niin sinun täytyy todistaa kaavojesi oikeellisuus ennen kuin kukaan ottaa sinua vakavasti. Tosin koska os osoitti jo edellisellä sivulla, että lukujärjestelmässäsi on vakavia ongelmia, niin en usko sinun pystyvän todistamaan kaavojasi.

Metabolix [21.03.2008 15:33:18]

#

JoinTuanJanohon kirjoitti:

Oho, se sinun numeerinen menetelmäsi tuon jakolaskun ratkaisulle ei oikein taida toimia, koska neljän yhtälöryhmän lävistäjässä jokainen alkio on jotain nollasta poikkeavaa.

Sinulta ovat taas perustermit hykassa. Numeerinen menetelmä oli sinun ratkaisusi, minun taas on sitä algebraa, josta paljon puhut.

Kuten varmaan itsekin tiedät, kun kerran olet tuon koodin itse kirjoittanut, niin real2d-luvut "redusoidaan" jokaisen laskutoimituksen jälkeen niin, että kaksi komponenteista on taatusti nollia. Vastaluodulla nelikomponenttisella luvulla tämän voi varmistaa lisäämällä sen ensin nollaan (0,0), lukuhan ei siitä muutu. Tällöin jakolasku ratkeaa kertolaskun kautta seuraavasti:

(a,b) / (c,d) = (e,f)
(c,d) * (e,f) = (a,b) = (ce + df, cf + de)

ce + df = a
cf + de = b

e = (ac - bd) / (cc - dd)
f = (bc - ad) / (cc - dd)

(a,b) / (c,d) = (e,f) = ((ac - bd) / (cc - dd), (bc - ad) / (cc - dd))

Koetahan nyt keksiä yksikin oikea perustelu, miksei tämä toimisi juuri näin. Katso koodiasi ja totea itse, että suuren ja mahtavan redusointisi ansiosta jakolasku on juuri noin helppo.

Neliöjuuresta tuli vastaavalla menetelmällä tällainen koodi (apumuuttujat käytössä selkeyden vuoksi; yhteen lausekkeeseen tämänkin voisi tiivistää):

real2d sqrt(real2d x, int which)
{
	// (a,b) * (a,b) = (c,d)
	// c = aa + bb
	// d = 2ab
	x = real2d(0, 0) + x; // Redusointi, e[1] = e[3] = 0;
	lreal c = x.e[0];
	lreal d = x.e[2];
	lreal D = c*c - d*d;
	if (c < 0 || D < 0) {
		return real2d::NaN;
	}
	lreal bb = (which & 1) ? ((c + sqrt(D)) / 2) : ((c - sqrt(D)) / 2);
	lreal aa = c - bb;
	lreal a = sqrt(aa);
	lreal b = sqrt(bb);
	lreal ab = d / 2;
	if (ab < 0) {
		return (which & 2) ? real2d(a, -b) : real2d(-a, b);
	}
	return (which & 2) ? real2d(-a, -b) : real2d(a, b);
}

JoinTuanJanohon [21.03.2008 18:32:18]

#

Joo, sovitaan, että en osaa algebraa, enkä oikeasti tee työtä mittaus- ja säätötekniikan parissa. Kyllä nuo sinun optimointisi ovat ok. Sitähän tuo koodin optimointi paljolti sovelletussa matematiikassa on. Jonkin sähkömoottorin mallintamisessa saattaa FEM generoida nopeastikin kymmenen viiva sadantuhannen tuntemattoman yhtälöryhmiä. Niiden ratkaisualgoritmit on pakko optimoida nopeuden ja muistinkulutuksen suhteen, jos mielii tuloksia suunnilleen reaaliajassa nähdä.

Alunperinhän tuo jakolasku-alkeisoperaation metodi on jäänne siitä, että asiaa tutkivalle ohjelmalle voi vain kertoa, että kaikissa tapauksissa jakolasku on oltava kertolaskun käänteistoiminto. Edelleen alkuperäinen pläjäys tutki noita asioita redusoimattomana.

Esimerkiksi logaritmi ja sen käänteisfunktio voidaan kertoa ohjelmalle alkeisoperaatioilla sarjakehitelmien muodossa. complex2:n jakolasku oli yhtä primitiivinen käänteistoiminto suhteessa kertolaskuun kantavektoreineen (sen kuitenkin sievensin, koska en viitsi katsella puolta A4:sta pitempiä funktioita). Huoh...

neau33 [22.03.2008 00:22:13]

#

No heippa taas!

kuu ei ole juustoa vaan guttabergaa...

ajv [22.03.2008 04:08:17]

#

Nea, kerrotko mitä on guttaberg? :)

Metabolix [22.03.2008 12:10:27]

#

Tarkoittanee guttaperkkaa, engl. gutta-percha, joka siis tarkoittaa kumipuuta tai siitä saatavaa kumia.

ByteMan [22.03.2008 23:26:46]

#

Sleepy sleepers kirjoitti:

Onko kuu juustoa, vai guttabergaa stna...

aika läppä laulu en nimee muista mut muistelisin et jotenkin tollee meni

neau33 [23.03.2008 03:12:20]

#

Heippa taas!

using System;

namespace mitä_kuu_on
{
   class Program
   {
      public static void Main(string[] args)
      {
         string aine1 = "juusto";
         string aine2 = "guttaberga";
         string aineet = aine1 + aine2;
         string EkaYhtTekijä = "";
         int aineita = 2; int i = 0;

         while (true) 
         {
            if (aine1.Substring(i, 1) == aine2.Substring(i, 1))
               break; i++;
         } 
         EkaYhtTekijä = aineet.Substring(i, 1); 
         int j = 0;  
         for (i = 0; i < aineet.Length; i++){
            if(aineet.Substring(i, 1) == EkaYhtTekijä) 
            {
               j += 1;
            }
         }
         j = j -(j % aineita);
         string theAine = "";
         switch (j) 
         {
            case 1: theAine = 
            aineet.Substring(aineet.IndexOf(aine1),aine1.Length) + "a";
            break;
            case 2: theAine = 
            aineet.Substring(aineet.IndexOf(aine2),aine2.Length) + "a";
            break;
         }            	
         Console.Write(theAine + "\n\r\n\r");
         Console.Write("press any key to exit");
         Console.ReadKey(true);
      }
   }	
}

-Nea-

Metabolix [23.03.2008 09:45:38]

#

neau33 kirjoitti:

aineet.Substring(aineet.IndexOf(aine1),aine1.Length)

Et yhtään mutkikkaammin osannut ilmaista asiaa aine1? Ja kirjainten laskemiseen olisi ihan valmis funktiokin, s.count(c => c == yhteinen). Erittäin viihdyttävää luettavaa tuollainen. ^_^

Mutta eiköhän lopeteta tämä sivuraiteen sivuraide, kun tämä ei edes liity siihen matematiikkaan, josta piti alunperin olla puhe.

neau33 [23.03.2008 10:36:59]

#

Heippa taas!

Tämä on niin hauska aihe, etten malta vielä lopettaa...
koska .NET'n mahdollistama mutkikkuus tässä kaikista hauskinta onkin ja mielestäni edelliseen verrattuna tällainen on kyllä aika valjua...

  string[] ainekset = new string [] {"juusto", "guttaberga"};
  Console.Write(ainekset[ainekset[0].CompareTo(ainekset[1])] + "a");

-Nea-


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta