গসিয়ান বিতরণকে 3 ডি তে প্লট করুন


10

সম্ভাব্যতা তত্ত্বে, সাধারণ (বা গাউসিয়ান) বিতরণ একটি খুব সাধারণ ক্রমাগত সম্ভাবনা বন্টন। সাধারণ বিতরণ পরিসংখ্যানগুলিতে গুরুত্বপূর্ণ এবং প্রায়শই প্রাকৃতিক এবং সামাজিক বিজ্ঞানে বাস্তব-মূল্যবান এলোমেলো ভেরিয়েবলগুলির প্রতিনিধিত্ব করতে ব্যবহৃত হয় যার বিতরণগুলি জানা যায় না।

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি 3 ত্রিমাত্রিক বিমানে গাউসীয় বিতরণের সম্ভাব্যতা ঘনত্বের পরিকল্পনা করা । এই ফাংশনটি হিসাবে সংজ্ঞায়িত করা হয়:

কোথায়:




এ = 1, σ x = σ y = σ σ

বিধি

  • আপনার প্রোগ্রামটি অবশ্যই একটি ইনপুট নিতে হবে σ , মানক বিচ্যুতি।
  • আপনার ভাষা / সিস্টেমের অনুমতি অনুসারে আপনার প্রোগ্রামটিকে গৌসীয় বিতরণের একটি 3D প্লটটি সর্বোচ্চ মানের মুদ্রণ করতে হবে।
  • আপনার প্রোগ্রামটি সরাসরি গাউসীয় বিতরণ বা সম্ভাবনার ঘনত্ব অন্তর্নির্মিত ব্যবহার করতে পারে না।
  • আপনার প্রোগ্রামটি শেষ করতে হবে না।
  • আপনার প্লটটি কালো এবং সাদা বা বর্ণের হতে পারে।
  • আপনার প্লটের নীচে গ্রিড লাইন থাকতে হবে। পক্ষের গ্রিড লাইনগুলি (উদাহরণগুলিতে দেখানো হয়েছে) অপ্রয়োজনীয়।
  • আপনার প্লটের গ্রিড লাইনের পাশের লাইন নম্বর থাকা দরকার নেই।

স্কোরিং

মতো যথারীতি ন্যূনতম বাইটস সহ জমাটি জেতা! অবিশ্বাস্যভাবে ছোট এবং স্বজ্ঞাত না হলে আমি বোতামটি ব্যবহার করে কোনও উত্তর কখনই "গ্রহণ করতে" পারি না।

উদাহরণ আউটপুট

আপনার আউটপুট এ জাতীয় কিছু দেখতে পারে:

5

বা এটি এর মতো দেখতে পারে:

6

আরও বৈধ আউটপুট । অবৈধ আউটপুট ।


আমি বিভ্রান্ত হয়ে পড়েছিলাম যে আপনি কেবল এক্স-অক্ষের জন্য ফাংশনটি দেখিয়েছেন। এক্স এবং ওয়াই সিগমা এবং মিউ এর জন্য আমাদের কি আলাদা ইনপুট / আউটপুট নেওয়া দরকার?
— স্কট মিলনার

সুতরাং আমরা কি ধরে নিতে পারি যে μ 0 সমান? এবং এক্স এবং y এর জন্য আপনার কী স্কেল প্রয়োজন? যদি এক্স-ওওয়াই-রেঞ্জগুলি σ এর তুলনায় খুব ছোট চয়ন করা হয় তবে গ্রাফটি মূলত একটি ধ্রুবক ফাংশনের মতো দেখাবে।
— গ্রেগ মার্টিন

(দ্বি-মাত্রিক বিতরণের জন্য, আমি মনে করি আপনি যদি এটি (x-μ) ^ 2 এর পরিবর্তে | x x μ | ^ 2 ব্যবহার করেন তবে এটি আরও স্পষ্ট হবে)
— গ্রেগ মার্টিন

@ গ্রেগমার্টিন সম্পাদিত।
— এমডি এক্সএফ

2
এখনও পরিষ্কার নয় ... x_o এবং y_o এবং what কী?
— গ্রেগ মার্টিন

উত্তর:


7

Gnuplot 4, 64 62 61 60 47 বাইট

(দিয়ে বাঁধা ম্যাথামেটিকাল ! সাব্বাস!)

se t pn;se is 80;sp exp(-(x**2+y**2)/(2*$0**2))

উপরের কোডটি নামের একটি ফাইলে সংরক্ষণ করুন A.gpএবং নিম্নলিখিতগুলির সাথে অনুরোধ করুন:

gnuplot -e 'call "A.gp" $1'>GnuPlot3D.png

যেখানে $1মানটির সাথে প্রতিস্থাপন করতে হবে σ। এটি বর্তমান ওয়ার্কিং ডিরেক্টরিতে কাঙ্ক্ষিত আউটপুট যুক্ত একটি .pngফাইল সংরক্ষণ করবে GnuPlot3D.png।

নোট যে এই শুধুমাত্র Gnuplot 5 যেহেতু Gnuplot 4 ডিস্ট্রিবিউশন সাথে কাজে $nআর্গুমেন্ট উল্লেখ অবচিত এবং আরো বাগাড়ম্বরপূর্ণ দুর্ভাগ্যবশত সঙ্গে প্রতিস্থাপিত হয়েছে ARGn।

এর সাথে নমুনা আউটপুট σ = 3:

নমুনা আউটপুট

এই আউটপুটটি ওপি অনুযায়ী ঠিক আছে ।


Gnuplot 4, বিকল্প সমাধান, 60 বাইট

এখানে একটি বিকল্প সমাধান যা পূর্ববর্তীটির চেয়ে অনেক দীর্ঘ তবে আউটপুটটি আমার মতে আরও ভাল দেখাচ্ছে।

se t pn;se is 80;se xyp 0;sp exp(-(x**2+y**2)/(2*$0**2))w pm

এটি এখনও আগের সমাধান হিসাবে একই কারণে Gnuplot 4 প্রয়োজন।

এর সাথে নমুনা আউটপুট σ = 3:

নমুনা আউটপুট # 2


I am not sure if it molds to the specifications requiredআপনি কি মনে করেন যে এটি নির্দিষ্ট করে না?
— এমডি এক্সএফ

@ এমডিএক্সএফ প্রথমত, আমি নিশ্চিত নই যে গ্রাফের স্বচ্ছতা ঠিক আছে কিনা। আমি সত্যই সত্যই এটি পছন্দ করি না, এ কারণেই আমি নিশ্চিত ছিলাম না যে এটি এখানে ঠিক আছে কিনা। দ্বিতীয়ত, গ্রাফটি ডিফল্টরূপে নীচে থেকে এক ইউনিটের উচ্চতায় শুরু হয় এবং আমি নিশ্চিত নই যে এটি ঠিক আছে কিনা। তৃতীয়ত, গ্রাফটি এক ইউনিট উচ্চের শুরু হওয়ার কারণে, আমি নিশ্চিত নই যে মূল পোস্টে প্রদত্ত গ্রাফের তুলনায় গ্রাফের অসামান্যতা ঠিক আছে। যাইহোক, যদি আপনার সাথে এটি ঠিক আছে তবে আমি আনন্দের সাথে এটির মূল উত্তরটি করব।
— আর কাপ,

@ এমডিএক্সএফ আসলে, আমি এটি আসল উত্তর হিসাবে পোস্ট করতে যাচ্ছিলাম, কিন্তু এই কারণে আমি তার পরিবর্তে বর্তমান উত্তরটি না পোস্ট করে পোস্ট করেছি।
— আর কাপ,

@MDXF বাস্তবিক, আমি এটা এমনকি খাটো যদি করতে পারেন এই ঠিক আছে। আমি তা বুঝতে পারি না, তবে এটি জিজ্ঞাসা করতে ক্ষতি করে না। এটি ডিফল্ট উপায়ে Gnuplotকোনও সিগমা সহ 2কোনও পরিবেশগত পরিবর্তন ছাড়াই গাউসীয় বিতরণের সম্ভাব্যতা ঘনত্বের পরিকল্পনা করবে ।
— আর কাপ,

@ এমডিএক্সএফ আমার ধারণা আমি আমার মূল উত্তর পোস্ট করার আগে জিজ্ঞাসা করতে পারতাম, কিন্তু সেই সময় আমি উত্তর পোস্ট করতে খুব আগ্রহী ছিলাম।
— আর কাপ,

14

সি ++, 3477 3344 বাইট

বাইট গণনায় অপ্রয়োজনীয় নিউলাইনগুলি অন্তর্ভুক্ত নয়।
এমডি এক্সএফ 133 বাইট গল্ফ করেছে।

সি ++ এর জন্য প্রতিযোগিতা করার কোনও উপায় নেই তবে আমি ভেবেছিলাম চ্যালেঞ্জের জন্য কোনও সফ্টওয়্যার রেন্ডারার লিখতে মজা হবে। আমি ছিঁড়ে ফেললাম এবং থ্রিডি গণিতের জন্য কিছু অংশ জিএলএম গল্ফ করেছিলাম এবং রাস্টারাইজেশনের জন্য জিয়াওলিন উয়ের লাইন অ্যালগরিদম ব্যবহার করেছি। প্রোগ্রামটি একটি পিজিএম ফাইল নামের ফলাফলের ফলাফল দেয় g।

আউটপুট

#include<array>
#include<cmath>
#include<vector>
#include<string>
#include<fstream>
#include<algorithm>
#include<functional>
#define L for
#define A auto
#define E swap
#define F float
#define U using
U namespace std;
#define K vector
#define N <<"\n"
#define Z size_t
#define R return
#define B uint8_t
#define I uint32_t
#define P operator
#define W(V)<<V<<' '
#define Y template<Z C>
#define G(O)Y vc<C>P O(vc<C>v,F s){vc<C>o;L(Z i=0;i<C;++i){o\
[i]=v[i]O s;}R o;}Y vc<C>P O(vc<C>l, vc<C>r){vc<C>o;L(Z i=0;i<C;++i){o[i]=l[i]O r[i];}R o;}
Y U vc=array<F,C>;U v2=vc<2>;U v3=vc<3>;U v4=vc<4>;U m4=array<v4,4>;G(+)G(-)G(*)G(/)Y F d(
vc<C>a,vc<C>b){F o=0;L(Z i=0;i<C;++i){o+=a[i]*b[i];}R o;}Y vc<C>n(vc<C>v){R v/sqrt(d(v,v));
}v3 cr(v3 a,v3 b){R v3{a[1]*b[2]-b[1]*a[2],a[2]*b[0]-b[2]*a[0],a[0]*b[1]-b[0]*a[1]};}m4 P*(
m4 l,m4 r){R{l[0]*r[0][0]+l[1]*r[0][1]+l[2]*r[0][2]+l[3]*r[0][3],l[0]*r[1][0]+l[1]*r[1][1]+
l[2]*r[1][2]+l[3]*r[1][3],l[0]*r[2][0]+l[1]*r[2][1]+l[2]*r[2][2]+l[3]*r[2][3],l[0]*r[3][0]+
l[1]*r[3][1]+l[2]*r[3][2]+l[3]*r[3][3]};}v4 P*(m4 m,v4 v){R v4{m[0][0]*v[0]+m[1][0]*v[1]+m[
2][0]*v[2]+m[3][0]*v[3],m[0][1]*v[0]+m[1][1]*v[1]+m[2][1]*v[2]+m[3][1]*v[3],m[0][2]*v[0]+m[
1][2]*v[1]+m[2][2]*v[2]+m[3][2]*v[3],m[0][3]*v[0]+m[1][3]*v[1]+m[2][3]*v[2]+m[3][3]*v[3]};}
m4 at(v3 a,v3 b,v3 c){A f=n(b-a);A s=n(cr(f,c));A u=cr(s,f);A o=m4{1,0,0,0,0,1,0,0,0,0,1,0,
0,0,0,1};o[0][0]=s[0];o[1][0]=s[1];o[2][0]=s[2];o[0][1]=u[0];o[1][1]=u[1];o[2][1]=u[2];o[0]
[2]=-f[0];o[1][2]=-f[1];o[2][2]=-f[2];o[3][0]=-d(s,a);o[3][1]=-d(u,a);o[3][2]=d(f,a);R o;}
m4 pr(F f,F a,F b,F c){F t=tan(f*.5f);m4 o{};o[0][0]=1.f/(t*a);o[1][1]=1.f/t;o[2][3]=-1;o[2
][2]=c/(b-c);o[3][2]=-(c*b)/(c-b);R o;}F lr(F a,F b,F t){R fma(t,b,fma(-t,a,a));}F fp(F f){
R f<0?1-(f-floor(f)):f-floor(f);}F rf(F f){R 1-fp(f);}struct S{I w,h; K<F> f;S(I w,I h):w{w
},h{h},f(w*h){}F&P[](pair<I,I>c){static F z;z=0;Z i=c.first*w+c.second;R i<f.size()?f[i]:z;
}F*b(){R f.data();}Y vc<C>n(vc<C>v){v[0]=lr((F)w*.5f,(F)w,v[0]);v[1]=lr((F)h*.5f,(F)h,-v[1]
);R v;}};I xe(S&f,v2 v,bool s,F g,F c,F*q=0){I p=(I)round(v[0]);A ye=v[1]+g*(p-v[0]);A xd=
rf(v[0]+.5f);A x=p;A y=(I)ye;(s?f[{y,x}]:f[{x,y}])+=(rf(ye)*xd)*c;(s?f[{y+1,x}]:f[{x,y+1}])
+=(fp(ye)*xd)*c;if(q){*q=ye+g;}R x;}K<v4> g(F i,I r,function<v4(F,F)>f){K<v4>g;F p=i*.5f;F
q=1.f/r;L(Z zi=0;zi<r;++zi){F z=lr(-p,p,zi*q);L(Z h=0;h<r;++h){F x=lr(-p,p,h*q);g.push_back
(f(x,z));}}R g;}B xw(S&f,v2 b,v2 e,F c){E(b[0],b[1]);E(e[0],e[1]);A s=abs(e[1]-b[1])>abs
(e[0]-b[0]);if(s){E(b[0],b[1]);E(e[0],e[1]);}if(b[0]>e[0]){E(b[0],e[0]);E(b[1],e[1]);}F yi=
0;A d=e-b;A g=d[0]?d[1]/d[0]:1;A xB=xe(f,b,s,g,c,&yi);A xE=xe(f,e,s,g,c);L(I x=xB+1;x<xE;++
x){(s?f[{(I)yi,x}]:f[{x,(I)yi}])+=rf(yi)*c;(s?f[{(I)yi+1,x}]:f[{x,(I)yi+1}])+=fp(yi)*c;yi+=
g;}}v4 tp(S&s,m4 m,v4 v){v=m*v;R s.n(v/v[3]);}main(){F l=6;Z c=64;A J=g(l,c,[](F x,F z){R
v4{x,exp(-(pow(x,2)+pow(z,2))/(2*pow(0.75f,2))),z,1};});I w=1024;I h=w;S s(w,h);m4 m=pr(
1.0472f,(F)w/(F)h,3.5f,11.4f)*at({4.8f,3,4.8f},{0,0,0},{0,1,0});L(Z j=0;j<c;++j){L(Z i=0;i<
c;++i){Z id=j*c+i;A p=tp(s,m,J[id]);A dp=[&](Z o){A e=tp(s,m,J[id+o]);F v=(p[2]+e[2])*0.5f;
xw(s,{p[0],p[1]},{e[0],e[1]},1.f-v);};if(i<c-1){dp(1);}if(j<c-1){dp(c);}}}K<B> b(w*h);L(Z i
=0;i<b.size();++i){b[i]=(B)round((1-min(max(s.b()[i],0.f),1.f))*255);}ofstream f("g");f 
W("P2")N;f W(w)W(h)N;f W(255)N;L(I y=0;y<h;++y){L(I x=0;x<w;++x)f W((I)b[y*w+x]);f N;}R 0;}
  • l বিশ্ব মহাকাশে গ্রিডের এক পাশের দৈর্ঘ্য।
  • c গ্রিডের প্রতিটি প্রান্তে অনুভূমিক সংখ্যা।
  • গ্রিডটি তৈরি করে এমন ফাংশনটিকে এমন একটি ফাংশন বলা হয় যা দুটি ইনপুট গ্রহণ করে, xএবংz (+ y উপরে যায়) শীর্ষবিন্দুর বিশ্ব স্থান সমন্বয় করে এবং শীর্ষবিন্দুর বিশ্ব স্থানের অবস্থানটি ফিরিয়ে দেয়।
  • w পিজিএমের প্রস্থ
  • h পিজিএমের উচ্চতা
  • mহল ভিউ / প্রজেকশন ম্যাট্রিক্স। যুক্তি তৈরি করতে ব্যবহৃত হয়m করতে ...
    • রেডিয়ানগুলিতে দেখার ক্ষেত্র
    • পিজিএম এর অনুপাত অনুপাত
    • ক্লিপ প্লেন কাছাকাছি
    • দূর ক্লিপ বিমান
    • ক্যামেরা অবস্থান
    • ক্যামেরা লক্ষ্য
    • আপ ভেক্টর

রেন্ডারারের আরও সহজেই আরও বৈশিষ্ট্য থাকতে পারে, আরও ভাল পারফরম্যান্স থাকতে পারে এবং আরও ভাল গল্ফ দেওয়া যায় তবে আমার মজা হয়েছে!


2
বাহ, অবিশ্বাস্য!
— এমডি এক্সএফ 29:56

1
মোটেও নয় ... এর জন্য যান!
— প্যাট্রিক পুরসেল

1
আপনি সেখানে যান, 133 বাইট বন্ধ!
— এমডি এক্সএফ

1
এটা ভয়ঙ্কর! আপনি যদি এই সবগুলি কোথায় শিখেছিলেন তা যদি আমাকে বলতে পারতেন তবে তা দুর্দান্ত হবে !
— হাটসুপয়েন্টারকুন

1
@ হ্যাটসুপয়েন্টারকুন আপনি খুশি হন! এই টিউটোরিয়াল ... ওপেনগ্লিউটোরিয়াল.আর / বিগেইনারস- টিউটোরিয়ালস / টিউটোরিয়াল ৩-- ম্যাট্রিক্স ... শুরু করার জন্য দুর্দান্ত জায়গা।
— প্যাট্রিক পুরসেল

9

গণিত, 47 বাইট

Plot3D[E^(-(x^2+y^2)/2/#^2),{x,-6,6},{y,-6,6}]&

ইনপুট হিসাবে গ্রহণ করে σ

ইনপুট

[2]

আউটপুট
এখানে চিত্র বর্ণনা লিখুন

-2 বাইট LLlAMnYP ধন্যবাদ


1
ম্যাথমেটিক জিতবে? সেখানে কোনও আশ্চর্যের কিছু নেই: পি
— এমডি এক্সএফ 28:17

3
2 বাইট সংরক্ষণ করেE^(-(x^2+y^2)/2/#^2)
— LLlAMnYP

6

আর, 105 102 87 86 বাইট

s=scan();plot3D::persp3D(z=sapply(x<-seq(-6,6,.1),function(y)exp(-(y^2+x^2)/(2*s^2))))

এসটিডিন থেকে সিগমা নেয়। থেকে একটি ভেক্টর তৈরি করে -6করার 6পথ অনুসরণ করে .1উভয়ের জন্য xএবং y, তারপর সৃষ্টি 121x121বাইরের পণ্য গ্রহণ করে ম্যাট্রিক্স xএবং y। এটি কলগুলি matrixএবং মাত্রাগুলি নির্দিষ্টকরণের চেয়ে কম । ম্যাট্রিক্স এখন ইতিমধ্যে পূরণ করা হয়েছে, তবে এটি ঠিক আছে, কারণ আমরা এটি ওভাররাইট করছি।

forমান উপর -loop লুপ x, ইন ভেক্টরকৃত অপারেশন ব্যবহার করে R, একটি সময়ে এক সারি ঘনত্ব ম্যাট্রিক্স তৈরি করা।

(s)applyআবার ভেক্টরাইজড ক্রিয়াকলাপগুলির জন্য একটি ছোট পদ্ধতি। নায়কের মতো এটিও বেশ কয়েকটি বাইট সংরক্ষণ করে নিজেরাই ম্যাট্রিক্স তৈরির কাজ পরিচালনা করে।

এখানে চিত্র বর্ণনা লিখুন

128 125 110 109 বাইট, তবে আরও অভিনব:

এই প্লটটি plotlyপ্যাকেজটির দ্বারা তৈরি । দুঃখের বিষয় হল স্পেসিফিকেশনটি কিছুটা শব্দযুক্ত, সুতরাং এটির জন্য প্রচুর বাইট খরচ হয়। ফলাফল যদিও সত্যিই অভিনব। আমি নিজের জন্য এটি চেষ্টা করার জন্য সুপারিশ করব।

s=scan();plotly::plot_ly(z=sapply(x<-seq(-6,6,.1),function(y)exp(-(y^2+x^2)/(2*s^2))),x=x,y=x,type="surface")

bla


আমি প্রশ্ন যে গ্রাফ নেই উল্লেখিত না লাইন সংখ্যা থাকতে হবে, আপনার দ্বিতীয় জমা জরিমানা।
— এমডি এক্সএফ

ওহ, আমি অবশ্যই এটি মিস করেছি আমি আমার সমাধানগুলি চারপাশে অদলবদল করেছিলাম। আমি মনে করি যে plotlyপ্লটটি এখানে অন্তর্ভুক্ত থাকার পরোয়ানা যথেষ্ট অভিনব।
— জেএডি

ভাল, উভয়ই আমার চেয়ে অনেক বেশি অনুরাগী : পি
— এমডি এক্সএফ

যেহেতু আপনি কেবল sএকবার ব্যবহার করেছেন তাই আপনি কি শুরু করতে পারবেন 2*scan()^2এবং মুছে ফেলতে পারবেন s=scan();? এটি 3 বাইট সংরক্ষণ করতে হবে।
— স্মার্টস

6

অ্যাপলসফট বেসিক, 930 783 782 727 719 702 695 637 বাইট

-72২ বাইট এবং সিলিংক্যাটটি আমার ত্রুটি এবং একটি সংক্ষিপ্ত অ্যালগরিদমকে চিহ্নিত করে একটি কার্যকারী প্রোগ্রামকে ধন্যবাদ

0TEXT:HOME:INPUTN:HGR:HCOLOR=3:W=279:H=159:L=W-100:Z=L/10:B=H-100:C=H-60:K=0.5:M=1/(2*3.14159265*N*N):FORI=0TO10STEPK:X=10*I+1:Y=10*I+B:HPLOTX,Y:FORJ=0TOL STEP1:O=10*J/L:D=ABS(5-I):E=ABS(5-O):R=(D*D+E*E)/(2*N*N):G=EXP(-R)*M:A=INT((C*G)/M):X=10*I+Z*O+1:Y=10*I+B-A:HPLOTTOX,Y:IF(I=0)GOTO4
1IF(J=L)GOTO3
2V=INT(J/10):IF((J/10)<>V)GOTO5
3D=ABS(5-I+K):E=ABS(5-O):R=(D*D+E*E)/(2*N*N):U=EXP(-R)/(2*3.14159*N*N):S=INT((C*U)/M):P=10*(I-K)+Z*O+1:Q=10*(I-K)+B-S:HPLOT TOP,Q:HPLOTX,Y
4IF(J=0)GOTO7:IF(I<10)GOTO5:IF(J=L)GOTO6:V=INT(J/10):IF((J/10)=V)GOTO6
5HCOLOR=0
6HPLOTTOX,10*I+B:HCOLOR=3:HPLOTX,Y
7NEXTJ:NEXTI:HPLOTW+1,H:HPLOTTO101,H:HPLOTTO0+1,H

অসম্পূর্ণ সংস্করণ এখানে।

যখন ইনপুট দেওয়া হয় 1:

ইনপুট-1

যখন ইনপুট দেওয়া হয় 2:

ইনপুট-2


1
এটি আবার বেসিকের শ্রেষ্ঠত্ব দেখায় ....

আরো কয়েকটি সংরক্ষণ করা যেমন 10. এছাড়াও কিছু ঘন ঘন ব্যবহৃত মান এক বা একাধিক ভেরিয়েবল, সেটিং দ্বারা বাইট, প্রতিস্থাপন করার পরামর্শ দিই EXP(X)/(2*3.14159*S1*S1)সঙ্গেEXP(X)*M
— ceilingcat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.